java Stream()流的使用

stream()流的简单使用

Stream流是JDK8新增的成员,可以让你以一种声明的方式处理数据,让数据的操作更加简洁顺畅。
直接看代码:

以实体类User作为测试

//实体类
@Data
@AllArgsConstructor
class User{
    String name;
    int score;

}
//模拟数据
ArrayList<User> objects = new ArrayList<>();
        objects.add(new User("小明",212));
        objects.add(new User("小空",0));
        objects.add(new User("小红",59));
        objects.add(new User("小粉",59));
        objects.add(new User("小刘",346));

以下列出常用stream()中的常用方法

 //转变为stream()流遍历全部
        objects.stream().forEach(li->{
            System.out.println(li);
        });
        /*User(name=小明, score=212)
          User(name=小空, score=0)
          User(name=小红, score=59)
          User(name=小粉, score=59)
          User(name=小刘, score=346)*/

        //filter过滤器的使用
        int count;
        count= (int) objects.stream().filter(p->0!=p.getScore()).count();
        System.out.println("成绩不为0的人数:"+count);
        //成绩不为0的人数:4

        List<User> collect = objects.stream().filter(p -> p.getScore() > 59).collect(Collectors.toList());
        System.out.println("成绩合格的(>60):"+collect);
        //成绩合格的(>60):[User(name=小明, score=212), User(name=小刘, score=346)]

        List<User> collect1 = objects.stream().filter(p -> p.getScore() != 0).collect(Collectors.toList());
        System.out.println("成绩不为0的集合:"+collect1);
        //成绩不为0的集合:[User(name=小明, score=212), User(name=小红, score=59), User(name=小粉, score=59), User(name=小刘, score=346)]

                                                                                                       //按照最高排序,如果不需要去掉reversed()
        List<User> collect2 = objects.stream().filter(p -> p.getScore()!=0).sorted(Comparator.comparing(User::getScore).reversed()).collect(Collectors.toList());
        System.out.println("按照最高排序:"+collect2);
        //按照最高排序:[User(name=小刘, score=346), User(name=小明, score=212), User(name=小红, score=59), User(name=小粉, score=59)]


        //map 集合映射用法

        String collect3 = objects.stream().map(p -> p.getName()).collect(Collectors.joining("、"));
        System.out.println("将所有姓名转换成拼接字符串(顿号分割):"+collect3);
        //将所有姓名转换成拼接字符串(顿号分割):小明、小空、小红、小粉、小刘

        Map<Integer, List<User>> collect4 = objects.stream().filter(p -> p.getScore() != 0).collect(Collectors.groupingBy(User::getScore));
        System.out.println("按照成绩进行归类 :"+collect4);
        /*按照成绩进行归类 :{212=[User(name=小明, score=212)],
                           346=[User(name=小刘, score=346)],
                           59=[User(name=小红, score=59), User(name=小粉, score=59)]
                           }
        * */
        //遍历map 取出内容
        for (Map.Entry<Integer,List<User>> listMap: collect4.entrySet()){
            System.out.println("成绩为"+listMap.getKey()+"的数量:"+listMap.getValue().size()+"人--"+listMap.getValue());
            /*
            * 成绩为212的数量:1人--[User(name=小明, score=212)]
              成绩为346的数量:1人--[User(name=小刘, score=346)]
              成绩为59的数量:2人--[User(name=小红, score=59), User(name=小粉, score=59)]
            * */

        }

        //Statistics可以进行统计
        IntSummaryStatistics intSummaryStatistics = objects.stream().mapToInt(p -> p.getScore()).summaryStatistics();
        System.out.println("获取最小值:"+intSummaryStatistics.getMin());
        System.out.println("获取最大值:"+intSummaryStatistics.getMax());
        //获取最小值:0
        //获取最大值:346


    }

版权声明:本文为qq_20251779原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。