引言:Java stream流在对集合的操作中提供了很多非常好用的方法,下面的这些方法是在开发中比较常用的,可以实现对集合数据的过滤、查找、求和等等。
1、按条件查找,找到了返回一个对象,反之返回null
// 查找id为6的用户信息
User user = getUsers().stream().filter(p -> p.getId() == 6).findAny().orElse(null);
System.out.println(user != null ? user.toString() : null);
2、按条件筛选数据,返回一个集合
// 查找age大于20的用户信息
List<User> users = getUsers().stream().filter(p -> p.getAge() > 20).collect(Collectors.toList());
System.out.println(users);
3、对BigDecimal类型数据进行求和
// 统计所有用户的总钱数
BigDecimal totalMoney = users.stream().filter(p -> p.getMoney() != null).map(User::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println(totalMoney);
4、按条件统计数量
// 统计用户数量
long count = getUsers().stream().filter(p -> p.getName() != null).count();
System.out.println(count);
5、按条件对数据进行求和
// 用户的评平均年龄
double totalAge = getUsers().stream().filter(p -> p.getName() != null).mapToDouble(User::getAge).sum();
System.out.println(Math.ceil(totalAge / count));
6、按条件对数据进行分组
// 用户按照年龄分组
Map<Integer, List<User>> userMap = getUsers().stream().collect(Collectors.groupingBy(User::getAge));
System.out.println(userMap);
7、List泛型集合按id分组,获取id分组之后最小值
List<Fog> result = new ArrayList<>();
fogs.stream().collect(Collectors.groupingBy(Fog::getStationId)).forEach((key, values) -> {
values.stream().min(Comparator.comparing(Fog::getValue)).ifPresent(fog -> result.add(toFog(key, fog.getValue())));
});
8、List泛型集合按id分组,获取id分组之后最大值
List<WindExtreme> result = new ArrayList<>();
windExtremes.stream().collect(Collectors.groupingBy(WindExtreme::getStationId)).forEach((key, values) -> {
values.stream().max(Comparator.comparing(WindExtreme::getSpeed)).ifPresent(windExtreme -> result.add(toWindExtreme(key, windExtreme.getSpeed())));
});
路漫漫其修远兮,吾将上下而求索
内容出处:,
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/tech/29779.html