collectors.grouping
时间: 2024-06-14 22:08:02 浏览: 169
java8 集合 多字段 分组 统计个数代码
5星 · 资源好评率100%
collectors.groupingBy是Java 8中Stream API提供的一个用于分组的收集器(Collector)。它允许我们根据指定的分类函数对元素进行分组,并将分组结果存储在一个Map中。
使用collectors.groupingBy,我们可以按照任意的分类函数对元素进行分组。分类函数可以是一个Lambda表达式、方法引用或者是一个Function接口的实现。分组的结果是一个Map,其中键是分类函数的返回值,值是属于该分类的元素列表。
下面是collectors.groupingBy的一些常见用法:
1. 按照对象的某个属性进行分组:
```java
List<Person> people = ...;
Map<String, List<Person>> peopleByCity = people.stream()
.collect(Collectors.groupingBy(Person::getCity));
```
上述代码将根据Person对象的城市属性将人员列表分组,生成一个Map,其中键是城市名称,值是属于该城市的人员列表。
2. 按照对象的某个属性进行分组,并统计每个分组中元素的数量:
```java
List<Person> people = ...;
Map<String, Long> countByCity = people.stream()
.collect(Collectors.groupingBy(Person::getCity, Collectors.counting()));
```
上述代码将根据Person对象的城市属性将人员列表分组,并统计每个分组中人员的数量,生成一个Map,其中键是城市名称,值是该城市中人员的数量。
3. 按照对象的某个属性进行分组,并对每个分组中的元素进行某种操作:
```java
List<Person> people = ...;
Map<String, Integer> totalAgeByCity = people.stream()
.collect(Collectors.groupingBy(Person::getCity, Collectors.summingInt(Person::getAge)));
```
上述代码将根据Person对象的城市属性将人员列表分组,并计算每个分组中人员的年龄总和,生成一个Map,其中键是城市名称,值是该城市中人员的年龄总和。
阅读全文