collectors.groupingby多个key
时间: 2024-10-17 08:11:07 浏览: 24
Java8 stream 中利用 groupingBy 进行多字段分组求和案例
5星 · 资源好评率100%
`Collectors.groupingBy` 是 Java Stream API 中的一个收集器,用于将元素按照指定键值对进行分组。当需要根据多个属性或者键进行分类时,可以组合多个 `Collectors.groupingBy` 实现。这通常通过传递一个函数到 `Collectors.groupingBy`,该函数接收一个元素并返回一个包含多个键值对的 `Map` 或者自定义类型的对象。
例如,假设你有一个 `Person` 对象列表,每个对象有 `name`, `age`, 和 `city` 属性,你可以这样做:
```java
List<Person> people = ...; // 假设 Person 类有 name, age, city 属性
Map<ThreeKey, List<Person>> groupedPeople = people.stream()
.collect(Collectors.groupingBy(Person::getName,
Collectors.groupingBy(Person::getAge,
Collectors.groupingBy(Person::getCity))));
```
在这个例子中,`groupedPeople` 将是一个 `Map`,键 `ThreeKey` 是由 `String` (名字)、`Integer` (年龄) 和 `String` (城市) 组合而成的对象。每个 `ThreeKey` 对应一组拥有相同名字、年龄和城市的 `Person` 列表。
阅读全文