Collectors.groupingBy的使用方法
时间: 2023-11-17 21:00:38 浏览: 91
Collectors.groupingBy是Java 8中的一个用于分组的工具,它可以将一个Stream按照指定的条件进行分组,并将分组后的结果存储在一个Map中。具体使用方法如下:
1.按照某个属性进行分组:
```
Map<String, List<User>> groupByDept = users.stream()
.collect(Collectors.groupingBy(User::getDept));
```
上述代码将根据User对象的dept属性进行分组,将分组后的结果存储在一个Map<String, List<User>>中,其中Key为dept属性的值,Value为dept属性值相同的User对象列表。
2.按照某个属性进行分组,并对分组后的结果进行统计:
```
Map<String, Long> groupByDeptThenCount = users.stream()
.collect(Collectors.groupingBy(User::getDept, Collectors.counting()));
```
上述代码将根据User对象的dept属性进行分组,并统计每个分组中元素的个数,将分组后的结果存储在一个Map<String, Long>中,其中Key为dept属性的值,Value为dept属性值相同的User对象个数。
3.按照某个属性进行分组,并对分组后的结果进行求和、平均值等操作:
```
Map<String, Double> groupByDeptThenGetAvgSalary = users.stream()
.filter(user -> Objects.nonNull(user.getDept())) //比较的字段不能有null值
.collect(Collectors.groupingBy(User::getDept, Collectors.averagingDouble(User::getSalary)));
```
上述代码将根据User对象的dept属性进行分组,并统计每个分组中元素的salary属性的平均值,将分组后的结果存储在一个Map<String, Double>中,其中Key为dept属性的值,Value为dept属性值相同的User对象的salary属性的平均值。
阅读全文