.stream().collect(Collectors.groupingBy多个值分组
时间: 2024-06-22 16:01:29 浏览: 168
Java Stream API中的`collect(Collectors.groupingBy())`方法是一个非常实用的功能,用于将集合中的元素按照指定键值进行分组。当你需要对多个属性或值进行分组时,可以使用`Collectors.groupingBy()`方法配合`Collectors.joining()`或者其他分组方式。
这里的`groupingBy()`方法接受一个函数作为参数,这个函数定义了如何从每个元素中提取键(Key)和值(Value)。如果你想要根据多个属性进行分组,你可以传递一个`BiFunction`或者`Function`(如果键是单一属性),以及一个`Map.Entry::getKey`和`Map.Entry::getValue`这样的函数链。
例如,假设你有一个Person对象列表,你想根据`name`和`age`属性进行分组:
```java
List<Person> people = ...; // 假设Person类有name和age属性
Map<String, Map<Integer, List<Person>>> groupedPeople =
people.stream()
.collect(Collectors.groupingBy(Person::getName,
Collectors.groupingBy(Person::getAge)));
```
在这个例子中,首先根据`getName()`分组,然后根据每个名字下的`getAge()`再次分组。结果是一个嵌套的Map,键是名字和年龄,值是具有相同名字和年龄的人的列表。
阅读全文