Collections类
Comparable(内部比较器)&Comparator(外部比较器)
泛型(Generic)
*集合流式处理(JDK8+)
jdk1.2引入集合框架后,同时也新增了一些类用于方便的对集合进行处理(排序,查找等),这些功能主要包含在java.util.Collections类中,Collections类中的所有方法都是静态方法,所以调用起来比较简单
public class CollectionsDemo { public static void main(String[] args) { Listlist = new ArrayList () { { add(new User("james", 22)); add(new User("tom", 28)); add(new User("kobe", 62)); add(new User("curry", 19)); add(new User("wade", 55)); add(new User("rose", 42)); add(new User("zhangsanfeng", 42)); } }; // 获取集合中最大(根据元素自然顺序-Comparable接口中compareTo方法的实现)的元素 User max = Collections.max(list); // 若集合中的元素未实现Comparable接口时,可以单独使用比较器(Comparator)比较 Lambda表达式 max = Collections.max(list, (u1, u2) -> u1.getAge() - u2.getAge()); System.out.println(max); // 反转集合 Collections.reverse(list); // 对集合顺序随机打乱(洗牌) Collections.shuffle(list); // 排序,根据集合中元素实现的Comparable接口 Collections.sort(list); // 根据提供的比较器排序 Collections.sort(list, (u1, u2) -> u1.getAge() - u2.getAge()); for (User user : list) { System.out.println(user); } } }
jdk1.5之后新增参数化类型,即将一个类型作为参数进行传递,这样可以将类型检查提前到编译期间,从而避免了在运行时进行类型检查(造成编程困难),具体使用如下 :
BaseManager.java
//设置参数化类型 public interface BaseManager{ public boolean add(T obj); public boolean del(T obj); public boolean update(T obj); public T findOne(T obj); public List findAll(); }
DeptImpl.java
public class DeptImpl implements BaseManager{ @Override public boolean add(Dept obj) { // TODO Auto-generated method stub return false; } @Override public boolean del(Dept obj) { // TODO Auto-generated method stub return false; } @Override public boolean update(Dept obj) { // TODO Auto-generated method stub return false; } @Override public Dept findOne(Dept obj) { // TODO Auto-generated method stub return null; } @Override public List findAll() { // TODO Auto-generated method stub return null; } }
EmpImpl.java
public class EmpImpl implements BaseManager{ @Override public boolean add(Emp obj) { // TODO Auto-generated method stub return false; } @Override public boolean del(Emp obj) { // TODO Auto-generated method stub return false; } @Override public boolean update(Emp obj) { // TODO Auto-generated method stub return false; } @Override public Emp findOne(Emp obj) { // TODO Auto-generated method stub return null; } @Override public List findAll() { // TODO Auto-generated method stub return null; } }
对于以上如果有多个参数化类型可以在声明时指定:
public interface BaseManager{ public boolean add(T1 t1,T2 t2); public boolean del(T1 t); public boolean update(T1 t); public T1 findOne(T1 t); public List findAll(); }
或者在方法中单独设定:
publicboolean add(T obj,E e);
JDK8引进了新的用于对集合处理的解决方案-流式处理,可以通过链式编程,函数式接口,lambda表达式简单便捷的对集合完成,过滤,排序,截取等操作。
public class StreamDemo { /** * 集合流式处理机制 * @param args */ public static void main(String[] args) { Listlist = new ArrayList<>(); list.add(new User("jackson", 22)); list.add(new User("jack", 32)); list.add(new User("aoteman", 40)); list.add(new User("tom", 43)); list.add(new User("atom", 22)); list.add(new User("bob", 23)); list.add(new User("jackson", 12)); list.add(new User("rose", 62)); list.add(new User("rose", 62)); list.add(new User("kobe", 17)); list.add(new User("curry", 16)); list = list.stream() .filter(user -> user.getAge() > 18) //过滤掉所有年龄小于等于18的用户 .sorted((u1,u2) -> u1.getAge() - u2.getAge()) //排序 .distinct() //去除重复(以hashcode为准:重写equals和hashcode) .skip(3) //跳过指定行 .limit(5) //显示指定行 .collect(Collectors.toList()); //收集数据 //统计 long count = list.stream().count(); System.out.println("符号条件的数据行数:"+count); //forEach遍历 list.stream().forEach(u->System.out.println(u)); //获取所有用户的用户名,并拼接为字符串输出 jack,aoteman,tom,rose String s = list.stream().map(User::getName).collect(Collectors.joining(",")); System.out.println(s); } }