Stream 中的groupingBy如何使用
时间: 2023-06-01 21:06:11 浏览: 222
StreamGroupBy.java
groupingBy是Java 8提供的一个Collector,用于对流中的元素进行分组操作。其中有一个参数是Function类型的,即根据该参数返回值进行分组。我们可以通过以下方式来使用groupingBy:
1. 根据某个属性分组
例如,我们有一个Person类,其中有一个属性为age,我们想要根据age进行分组,可以使用以下代码:
List<Person> personList = new ArrayList<>();
Map<Integer, List<Person>> ageGroupMap = personList.stream().collect(Collectors.groupingBy(Person::getAge));
2. 根据多个属性分组
如果我们想要根据多个属性进行分组,可以使用以下代码:
List<Person> personList = new ArrayList<>();
Map<String, Map<Integer, List<Person>>> nameAgeGroupMap = personList.stream().collect(Collectors.groupingBy(Person::getName, Collectors.groupingBy(Person::getAge)));
在这个例子中,我们首先根据name进行分组,然后再对每个组根据age进行进一步分组。
3. 收集统计值
除了分组之外,groupingBy还可以收集统计值,如求和、取平均数等。以下是一个例子:
List<Person> personList = new ArrayList<>();
Map<String, Double> nameAgeAverageAgeMap = personList.stream().collect(Collectors.groupingBy(Person::getName, Collectors.averagingDouble(Person::getAge)));
在这个例子中,我们首先根据name进行分组,然后统计每个组中的age平均值。
阅读全文