我有一个类似于这样的结构的集合:
@Entity
public class RRR{
private Map<XClas, YClas> xySets;
}
并且XClass
有一个名为ZZZ
的字段。
我的问题是:
我想使用lambda进行聚合,以获取一个Map<ZZZ,List<RRR>>
。是否可能?现在我卡住了:
Map xxx = rrrList.stream().collect(
Collectors.groupingBy(x->x.xySets().entrySet().stream().collect(
Collectors.groupingBy(y->y.getKey().getZZZ()))));
但它是 Map<Map<ZZZ, List<XClas>>, List<RRR>>
,所以这不是我要找的 :)
现在只是为了让它能够工作,我使用了两个嵌套循环进行聚合,但如果您能帮助我使用lambda实现,那就太好了。
编辑
我按要求发布了我现在得到的内容。我已经离开了嵌套循环,并设法完成了这一点:
Map<ZZZ, List<RRR>> temp;
rrrList.stream().forEach(x -> x.getxySetsAsList().stream().forEach(z -> {
if (temp.containsKey(z.getKey().getZZZ())){
List<RRR> uuu = new LinkedList<>(temp.get(z.getKey().getZZZ()));
uuu.add(x);
temp.put(z.getKey().getZZZ(), uuu);
} else {
temp.put(z.getKey().getZZZ(), Collections.singletonList(x));
}
}));
感谢您的提前帮助。
getxySetsAsList()
,是获取键或值的列表吗?看起来像是一个Entry
的列表,但你只使用了键。 - DjonCollectors.reducing()
吗? - Djon