Collectors.groupingBy
时间: 2023-07-08 20:49:04 浏览: 59
`Collectors.groupingBy()`是Java 8中提供的一个用于分组的收集器,它用于将流中的元素按照指定的条件进行分组,并将分组后的结果放入一个Map中返回。以下是`groupingBy()`的基本用法:
```java
Map<K, List<T>> result = stream.collect(Collectors.groupingBy(Function<T, K> classifier));
```
其中,`classifier`是一个函数式接口,用于指定按照哪个条件进行分组,其返回值类型为K。`T`表示流中元素的类型,`K`表示分组的键的类型,`List<T>`表示分组后的元素列表。
例如,我们有一个Person类,其中包含姓名和年龄两个属性,我们可以按照年龄将Person对象进行分组:
```java
List<Person> persons = Arrays.asList(
new Person("Alice", 18),
new Person("Bob", 21),
new Person("Charlie", 18),
new Person("David", 21),
new Person("Eva", 18)
);
Map<Integer, List<Person>> result = persons.stream()
.collect(Collectors.groupingBy(Person::getAge));
System.out.println(result);
```
输出结果为:
```
{18=[Person{name='Alice', age=18}, Person{name='Charlie', age=18}, Person{name='Eva', age=18}], 21=[Person{name='Bob', age=21}, Person{name='David', age=21}]}
```
可以看到,按照年龄进行分组后,18岁和21岁的人分别被分成了两组。