假设有两个映射,使得第一个映射的值是第二个映射的键,如下所示
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);