假设有两个映射,使得第一个映射的值是第二个映射的键,如下所示

Map1 { k1:[v1,v2,v3], k2:[v4,v5], k3:[v6,v7,v8] }
Map2 { v1:[a1,a2], v2:[a3,a4,a5], v3:[a6], v4:[a7,a8], v5:[a9,a10,a11], v6[a1,a3], v7[a1,a9], v8[a2,a4,a5] }


我想根据上面的2张地图制作一个地图说Map3

Map3 {
    k1:[a1,a2,a3,a4,a5,a6],
    k2:[a7,a8,a9,a10,a11],
    k3:[a1,a2,a3,a4,a5,a9]
    }


Java8 Collections API中是否有任何内置方法,可以用来高效地派生Map3,而不是遍历两个地图以旧的Java5方法获得Map3。

最佳答案

替代解决方案是:

Map<String, List<String>> result  =
    map1.entrySet().stream()
            .collect(HashMap::new, (m, e) -> m.merge(e.getKey(),
                    e.getValue().stream().flatMap(k -> map2.get(k).stream()).collect(toList()),
                    (l1, l2) -> { l1.addAll(l2);return l1; }),
                    Map::putAll);

07-24 19:59