比如给了我一个班级的所有人的姓氏和姓名对象集合,根据这个集合求出各姓氏有多少人。直接上代码。
User的实体类对象为
@Data@NoArgsConstructor@AllArgsConstructorpublic class User { private String firstName; // 姓氏 private String name; // 姓名}
List userList = new ArrayList<>();userList.add(new User("张","张三"));userList.add(new User("张","张四"));userList.add(new User("张","张五"));userList.add(new User("李","李一"));userList.add(new User("李","李二"));Map groupCount = userList.stream() .collect(Collectors.toMap(User::getFirstName, el -> 1, Integer::sum));System.out.println(groupCount);
输出的结果为:
即姓张的有3个,姓李的有两个。
详解: 将该集合的stream流用Collectors对象转成Map,用User对象的firstName作为Key,默认键值为1,在处理键冲突的函数中,将上一次的值与默认值1相加。比如处理第一个姓张的人的时候,默认值为1,处理第二个也是姓张的人的时候默认值也是1,将1和1相加得2,(即有两个姓张的人了),处理第三个姓张的人的时候,将上次的结果2与第三个姓张返回的默认值1相加,得3,以此类推...得到处理结果。
来源地址:https://blog.csdn.net/weixin_45313494/article/details/130801973