StreamAPI 按字段A分组B字段

160 阅读1分钟

在今天的工作中遇到了一个复杂的StreamAPI分组场景,搜了一下,没有什么人写,自己研究了一下文档

类文件

@Data
public class Foo {
    private String key;
    private String content;
}

目标的形式

Map<String, List<String>> result; //其中Key 是Foo.key, value是相同content组成的列表

如何使用Java Stream API 实现

List<Foo> fooList = ... // 来源不详细
Map<String, List<String>> result = fooList.stream()        .collect(Collectors.groupingBy(Foo::getKey, Collectors.mapping(Foo::getContent, Collectors.toList())));

另:如果结果要去重,可能生成一个Set更合理

Map<String, Set<String>> result1 = fooList.stream()        .collect(Collectors.groupingBy(Foo::getKey, Collectors.mapping(Foo::getContent, Collectors.toSet())));