Java8中stream流的collectingAndThen方法应用实例详解
作者: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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!