我有以下类(class):
Class Foo{
private String cassette;
private List<String> organs; //["Lung","Liver"]
//getter setter
}
我正在将数据收集到 List<Foo>
我想按器官将它们分组为 Map<String,List<Foo>>
到目前为止,我已经尝试过以下解决方案:
Map<Object, List<Foo>> collect = fooList
.stream()
.collect(Collectors.groupingBy(x -> x.getOrgan()));
它返回Map<Object, List<Foo>>
而不是Map<String,List<Foo>>
如下:
{[Lung, Liver]=[Foo [cassette=1A, organ=[Lung, Liver]]], [Liver]=[Foo [cassette=2A, organ=[Liver]]]}
另外,我怎样才能创建一个返回 Map<String,List<Foo>>
的通用方法?当我仅传递 Type<T>
分组的 key 时对于 Collectors.groupingBy(T)
它将按指定的键分组
最佳答案
您正在按 List<String>
进行分组,不是由String
。按 String
分组你必须预处理 Stream
首先获取 (String,Foo) 的所有对:
Map<String,List<Foo>> collect =
fooList.stream()
.flatMap(f -> f.getOrgan().stream().map(o -> new SimpleEntry<>(o,f)))
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue,
Collectors.toList())));
关于Java 流 Collectors.groupingBy() 与字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60299992/