Stream流的操作及方法汇总

Stream流的操作及方法汇总

 

方法   作用
filter()  接收lambda,从流中排除某些操作
limit() 截断流,使其元素不超过给定对象
skip(n) 跳过元素,返回一个扔掉了前n个元素的流,若流中元素不足n个,则返回一个空流,与limit(n)互补
distinct 筛选,通过流所生成元素的hashCode()和equals去除重复元素
map 接受Lambda,将元素转换成其他形式或提取信息。接受一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素
sorted() 自然排序(Comparable)
sorted(Comparator com) 定制排序(Comparator)
allMatch 检查是否匹配所有元素
anyMatch 检查是否至少匹配一个元素
noneMatch 检查是否没有匹配所有元素
findFirst 返回第一个元素
findAny 返回当前流中的任意元素
count 返回流中元素的总个数
max 返回流中最大值
min 返回流中最小值
reduce 归约操作可以将流中元素反复结合起来,得到一个值
collect 将流转换为其他形式,接收一个Collector接口实现,用于给Stream中汇总的方法

 

public static void main(String[] args) {
        List<User> list = getUserList();
        list.stream().forEach(user -> System.out.println("id:"+user.getId()+",姓名:"+user.getName()+",年龄:"+user.getAge()));
        //getFilter(list);
        //getSkipLimit(list);
        //getDistinct(list);
        //;
        //Stream<User> stream =  list.stream().sorted();
        //reduce和max和min
        System.out.println(list.stream().map(User::getAge).reduce(1000,Integer::sum));
        System.out.println(list.stream().map(User::getAge).max(Integer::compare).get());
        System.out.println(list.stream().map(User::getAge).min(Integer::compare).get());
    }


    private static void  getFindFirstAndFindAny(List<User> list){
        //User userModel  =  list.stream().filter( user -> user.getAge()>500&&user.getAge()<1000).findFirst().get(null);
        //orElse如果流中没有数据就返回空
        User userModel  =  list.stream().filter( user -> user.getAge()>500&&user.getAge()<1000).findAny().orElse(null);
        System.out.println(userModel.toString());
    }
    private static void getMath(List<User> list){

        //这里使用Age做匹配
        //allMatch是否所有数据都满足500<age<1000

        //anyMatch 查看是否有一条数据是


        //noneMatch 所有数据都不满足

        Boolean bl  = list.stream().anyMatch(user -> user.getAge()>500&&user.getAge()<1000);
        System.out.println(bl);
        if(bl){
            list.stream().filter(user -> user.getAge()>500&&user.getAge()<1000).forEach(user -> System.out.println(user.toString()));
        }

    }

    //sorted和map
    private static void getSortedAndMap(List<User> list){
        Stream<Object> stream  = list.stream().sorted(Comparator.comparing(User::getAge).reversed()).map(user -> user.getName());
        stream.forEach(user -> System.out.println(user.toString()));

    }
    private static void getDistinct(List<User> list){
        //去重
        Stream<User> stream = list.stream().distinct();
        stream.forEach(user -> System.out.println(user.getName()));
    }

    private static void  getSkipLimit(List<User> list){
        //skip() 和 limit()
        /**
         * 单用limit的话就是从第0个开始
         * skip也是从0开始
         */
        Stream<User> stream = list.stream().skip(4).limit(3);
        stream.forEach(user -> System.out.println(user.getName()));
    }
    public static void getFilter( List<User> list){
        //filter()排除
        //forEach循环便利
        list.stream().filter(user -> !user.getAge().equals("170")).forEach(user -> System.out.println(user.getName()));
        System.out.println("======================================");
        //这两个相等
        Stream<User> stream = list.stream().filter(user -> !user.getAge().equals("170"));
        stream.forEach(user -> System.out.println(user.getName()));
    }

    //
    public static List<User> getUserList(){
        User user = new User(""+((int)(Math.random()*1000000000)+1000000),"李白",1000);
        User user1 = new User(""+((int)(Math.random()*1000000000)+1000000),"周树人",170);
        User user2 = new User(""+((int)(Math.random()*1000000000)+1000000),"白居易",900);
        User user3 = new User(""+((int)(Math.random()*1000000000)+1000000),"林则徐",780);
        User user4 = new User(""+((int)(Math.random()*1000000000)+1000000),"赵亦",970);
        User user5 = new User(""+((int)(Math.random()*1000000000)+1000000),"卫东来",1100);

        List<User> list = new ArrayList<>();
        list.add(user);
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);
        list.add(user5);
        list.add(user5);

        return list;
    }

 

posted @ 2021-12-28 10:07  白衣の  阅读(659)  评论(0编辑  收藏  举报