Java中用Stream分组并求各组数量

比如给了我一个班级的所有人的姓氏和姓名对象集合,根据这个集合求出各姓氏有多少人。直接上代码。

User的实体类对象为

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String firstName; // 姓氏
    private String name; // 姓名
}
List<User> userList = new ArrayList<>();
userList.add(new User("张","张三"));
userList.add(new User("张","张四"));
userList.add(new User("张","张五"));
userList.add(new User("李","李一"));
userList.add(new User("李","李二"));
Map<String, Integer> 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,以此类推...得到处理结果。

猜你喜欢

转载自blog.csdn.net/weixin_45313494/article/details/130801973