记录我的java之路——day13(周更)

day13-集合框架(下)

  • Collections类

  • Comparable(内部比较器)&Comparator(外部比较器)

  • 泛型(Generic)

  • *集合流式处理(JDK8+)

Collections类

jdk1.2引入集合框架后,同时也新增了一些类用于方便的对集合进行处理(排序,查找等),这些功能主要包含在java.util.Collections类中,Collections类中的所有方法都是静态方法,所以调用起来比较简单

public class CollectionsDemo {
​
    public static void main(String[] args) {
​
        List<User> list = new ArrayList<User>() {
            {
                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<T> {
​
    public boolean add(T obj);
    
    public boolean del(T obj);
    
    public boolean update(T obj);
    
    public T findOne(T obj);
    
    public List<T> findAll();
    
}

DeptImpl.java

public class DeptImpl implements BaseManager<Dept>{
​
    @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<Dept> findAll() {
        // TODO Auto-generated method stub
        return null;
    }
}

EmpImpl.java

public class EmpImpl implements BaseManager<Emp> {
​
    @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<Emp> findAll() {
        // TODO Auto-generated method stub
        return null;
    }
}

对于以上如果有多个参数化类型可以在声明时指定:

public interface BaseManager<T1,T2> {
​
    public boolean add(T1 t1,T2 t2);
    public boolean del(T1 t);
    public boolean update(T1 t);
    public T1 findOne(T1 t);
    public List<T1> findAll();
}
​

或者在方法中单独设定:

public <E> boolean add(T obj,E e);

JDK8流式处理集合

JDK8引进了新的用于对集合处理的解决方案-流式处理,可以通过链式编程,函数式接口,lambda表达式简单便捷的对集合完成,过滤,排序,截取等操作。

public class StreamDemo {
​
    /**
     * 集合流式处理机制
     * @param args
     */
    public static void main(String[] args) {
        
        List<User> list = 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);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34304871/article/details/81274759
今日推荐