collectors.groupingby()
时间: 2023-04-14 21:02:08 浏览: 61
collectors.groupingby()是Java 8中的一个收集器,用于将元素按照指定的条件分组。它接受一个Function作为参数,该函数将元素映射到分组的键上。返回的结果是一个Map,其中键是分组的键,值是该分组的元素列表。
相关问题
Collectors.groupingBy
`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岁的人分别被分成了两组。
collectors.groupingby
`Collectors.groupingBy` 是 Java 8 中的一个静态工厂方法,用于将流中的元素分组并归纳为 `Map` 类型。它需要两个参数:第一个参数是用于分组的键的函数,第二个参数是用于统计组中元素的函数。
示例代码:
```
List<Person> people = ...
Map<String, List<Person>> peopleByCity = people.stream()
.collect(Collectors.groupingBy(Person::getCity));
```
这段代码将根据`Person`类中的getCity方法的返回值来分组,每组对应一个List<Person>,并转化成Map<String,List<Person>>.
阅读全文