java Collectors.groupingBy()的用法
时间: 2023-07-07 19:44:40 浏览: 91
深入探索Java 8的`Collectors.groupingBy()`:分组的艺术
Java中的Collectors.groupingBy()是一个非常有用的方法,它可以将一个Stream对象中的元素按照指定的规则分组,并将每个分组的结果收集到一个Map对象中。该方法有多种重载形式,可以根据不同的需求进行使用。
下面是Collectors.groupingBy()的基本用法:
```java
Map<K, List<T>> result = stream.collect(Collectors.groupingBy(Function<T, K> classifier));
```
其中,stream是一个Stream对象,Function<T, K> classifier是一个函数式接口,用于指定分组规则,返回类型为K。该方法根据函数式接口返回的结果进行分组,并将每个分组的结果存储在一个List<T>中,最终返回一个Map<K, List<T>>对象。
例如,假设有一个Student类,具有name和age两个属性,现在有一个List<Student>对象,我们希望按照年龄将学生分组,并统计每个年龄分组中的学生数量,可以使用如下代码:
```java
List<Student> students = //初始化学生列表
Map<Integer, Long> result = students.stream()
.collect(Collectors.groupingBy(Student::getAge, Collectors.counting()));
```
在这个示例中,我们通过Stream对象的collect()方法调用Collectors.groupingBy()方法,指定按照Student对象的年龄属性进行分组,并使用Collectors.counting()方法统计每个分组中的学生数量。最终,我们将每个分组的结果存储在一个Map<Integer, Long>对象中。
除了上述示例中的用法,Collectors.groupingBy()方法还有其他重载形式,例如可以指定分组后的结果类型、指定分组后的排序方式等。您可以根据需要选择不同的重载形式。
阅读全文