Collectors.groupingby方法解释
时间: 2023-07-25 22:06:39 浏览: 84
`Collectors.groupingBy()` 方法是 Java 8 中 `Collectors` 类的一个静态方法,用于按照指定的分类函数对元素进行分组,返回一个 `Map`。该方法有两个重载版本,一个接收分类函数,另一个接收分类函数和一个收集器 `Collector`。
语法如下:
```java
public static <T, K> Collector<T, ?, Map<K, List<T>>> groupingBy(Function<? super T, ? extends K> classifier)
```
其中,`T` 表示元素类型,`K` 表示分组的键类型。`classifier` 是一个函数,用于从元素中提取分组的键。
例如,假设有一个 `List` 存储了一些人员的信息,包括姓名和年龄,我们可以使用 `groupingBy` 方法按照年龄分组:
```java
List<Person> persons = Arrays.asList(
new Person("张三", 18),
new Person("李四", 20),
new Person("王五", 18),
new Person("赵六", 22)
);
Map<Integer, List<Person>> groups = persons.stream()
.collect(Collectors.groupingBy(Person::getAge));
```
上述代码中,`Person` 是一个自定义类,包含了 `name` 和 `age` 两个属性,并提供了相应的 getter 方法。`groupingBy(Person::getAge)` 表示按照 `Person` 实例的 `age` 属性进行分组,返回的 `Map` 的键类型为 `Integer`,值类型为 `List<Person>`,表示相同年龄的人员列表。最终结果为:
```java
{18=[Person{name='张三', age=18}, Person{name='王五', age=18}], 20=[Person{name='李四', age=20}], 22=[Person{name='赵六', age=22}]}
```
除了按照单个属性进行分组外,`groupingBy` 方法还支持按照多个属性进行分组,甚至支持嵌套分组。另外,还可以使用 `groupingBy` 方法的重载版本,传入一个收集器,对分组的结果进行进一步处理。
阅读全文