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版权协议,转载请附上原文出处链接和本声明。