`groupingBy()`方法还可以配合哪些操作一起使用?
时间: 2024-12-06 17:21:21 浏览: 7
`groupingBy()`方法通常用于结合其他收集器(Collectors)来进一步处理分组的结果。它可以配合以下操作:
1. **映射操作**(如`mapping()`或`collectingAndThen()`):可以对每个组应用一个转换函数,生成新的数据结构,比如将分组的人按年龄转成年龄统计信息。
```java
Map<String, Long> ageCounts = people.stream()
.collect(Collectors.groupingBy(Person::getName,
Collectors.counting()));
```
2. **折叠操作**(如`reducing()`、`summingInt()`等):可以在每个组内执行聚合操作,比如求名字符数总和。
```java
long totalNameLength = people.stream()
.collect(Collectors.groupingBy(Person::getName,
Collectors.reducing(0, Person::getNameLength, Integer::sum)));
```
3. **合并操作**(如`joining()`):可以将分组后的结果连接成字符串,比如拼接每个人的姓名。
```java
String names = people.stream()
.collect(Collectors.groupingBy(Person::getName,
Collectors.joining(", ")));
```
4. **扁平化操作**(如`flatMapping()`):如果分组的元素本身也是集合,可以进一步展开。
组合这些操作可以使`groupingBy()`功能变得非常强大,满足复杂的数据分析需求。
阅读全文