JAVA8 - 用lambda分组

Luk*_*cky 4 java lambda

我有一个像这样结构的集合:

@Entity
public class RRR{

    private Map<XClas, YClas> xySets;

}
Run Code Online (Sandbox Code Playgroud)

XClas有一个叫做的字段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()))));
Run Code Online (Sandbox Code Playgroud)

但它Map<Map<ZZZ, List<XClas>>, List<RRR>>不是我想要的:)

现在只是为了让它工作,我用两个嵌套循环进行聚合,但如果你可以帮我用lambdas完成它,它会非常棒.

编辑

据我所知,我发布了现在的内容.我已经离开了嵌套循环,并且我设法工作到这一点:

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));
            }
        }));
Run Code Online (Sandbox Code Playgroud)

提前致谢

kor*_*rda 5

那样的东西?:

    Map<ZZZ, List<RRR>> map = new HashMap<>();

    list.stream().forEach(rrr -> {
        rrr.xySets.keySet().stream().forEach(xclas -> {
            if (!map.containsKey(xclas.zzz))
                map.put(xclas.zzz, new ArrayList<RRR>());
            map.get(xclas.zzz).add(rrr);
        });
    });
Run Code Online (Sandbox Code Playgroud)