Java8中stream流的collectingAndThen方法应用实例详解
更新时间:2025年03月04日 11:29:35 作者:shy好好学习
Java8中的Stream流提供了collectingAndThen方法,用于对归纳结果进行二次处理,文章通过User类的数据填充,演示了如何使用该方法进行集合去重、查找最高工资员工、计算平均工资等操作,感兴趣的朋友跟随小编一起看看吧
1.方法定义:
此方法是在进行归纳动作结束之后,对归纳的结果进行二次处理。
2.代码演示:
User类准备
/**
* @desc: 用户实体类
* @author: shy
* @date: 2020/12/28 12:38
*/
@Data
@AllArgsConstructor
public class User {
//用户Id
int userId;
//用户姓名
String userName;
//用户工资
Double salary;
}数据填充
//数据准备 User user1 = new User(1, "hangman", 100d); User user2 = new User(1, "list", 200d); User user3 = new User(2, "wing", 200d); User user4 = new User(2, "zeal", 100d); User user5 = new User(3, "tuba", 300d); List<User> userList = new ArrayList<>(); userList.add(user1); userList.add(user2); userList.add(user3); userList.add(user4); userList.add(user5);
1.对集合根据Id进行去重并返回去重后的List:
//对集合的结果进行去重
List<User> list = userList.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getUserId))), ArrayList::new));
System.out.println(list);
2.对集合根据Id进行去重并返回去重后的Map:
//对集合的结果进行去重
Map<Integer, User> userMap = userList.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getId))),
treeSet -> treeSet.stream().collect(Collectors.toMap(User::getId, user -> user, (u1, u2) -> u1))
));
System.out.println(userMap);
3.查找工资最高的员工的姓名:
//查找工资最高的员工的姓名 String userName = userList.stream() .collect(Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(User::getSalary)),(Optional<User> user) -> user.map(User::getUserName).orElse(null))); System.out.println(userName);

4.计算用户工资的平均值:
//计算用户工资的平均值 Double avgSalary = userList.stream() .collect(Collectors.collectingAndThen(Collectors.averagingDouble(User::getSalary), Double::doubleValue)); System.out.println(avgSalary);

3.总结:
通过上面的例子,我们可以熟练的使用collectingAndThen进行归纳的结果进行二次处理。
到此这篇关于Java8中stream流的collectingAndThen方法应用实例的文章就介绍到这了,更多相关java8 stream流 collectingAndThen内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
相关文章
idea中无法自动装配未找到 ‘XXXXXXX‘ 类型的 Bean
本文主要介绍了idea中无法自动装配未找到 ‘XXXXXXX‘ 类型的 Bean的原因及三种解决方法,具有一定的参考价值,感兴趣的可以了解一下2024-03-03
java中Sources目录Resources目录的区别解读
这篇文章主要介绍了java中Sources目录Resources目录的区别解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-12-12


最新评论