[英]Java stream Collectors.groupingBy() with list of String
我有以下课程:
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>>
如下:
{[肺,肝]=[Foo [盒=1A,器官=[肺,肝脏]]],[肝脏]=[Foo [盒=2A,器官=[肝脏]]]}
另外,当我只传递用于对Collectors.groupingBy(T)
进行分组的Type<T>
键时,如何创建一个返回Map<String,List<Foo>>
的通用方法,并且它将按指定的键进行分组
您按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())));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.