在今天的工作中遇到了一个复杂的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())));