合并两个List值映射

pau*_*aul 4 java java-8 java-stream

有人知道如何与Java 8合并这种类型的两张地图吗?

Map<String,  List<String>> map1--->["a",{1,2,3}]
Map<String,  List<String>> map2--->["a",{4,5,6}]
Run Code Online (Sandbox Code Playgroud)

并获得合并的结果

Map<String,  List<String>> map3--->["a",{1,2,3,4,5,6}]
Run Code Online (Sandbox Code Playgroud)

如果存在,我正在寻找一种非冗长的方式.我知道如何以旧时尚的方式做到这一点.

问候.

Tun*_*aki 6

总的想法是一样的这篇文章.您可以从第一个地图创建一个新地图,迭代第二个地图并将每个键与第一个地图合并,这要归功于merge(key, value, remappingFunction).在发生冲突的情况下,应用重映射功能:在这种情况下,它采用两个列表并合并它们; 如果没有冲突,则输入具有给定键和值的条目.

Map<String, List<String>> mx = new HashMap<>(map1);
map2.forEach((k, v) -> mx.merge(k, v, (l1, l2) -> {
    List<String> l = new ArrayList<>(l1);
    l.addAll(l2);
    return l;
}));
Run Code Online (Sandbox Code Playgroud)

  • 另一种合并函数是`(l1,l2) - > Stream.concat(l1.stream(),l2.stream()).collect(toList())`.这是目前为止最简单的Java(没有第三方库). (2认同)
  • @paul它确实减少了冗长,但有点复杂(因为它创建了流管道). (2认同)