合并Java中的两个Map值,如果键相同,则追加Java 7或Java 8中不会覆盖的值

Arjun:

我想合并2 Maps,但是当键相同时,应该附加值而不是覆盖值。

比方说

Map<String, Set<String>> map1 = new HashMap<>();
Set<String> set1 = new HashSet<>();
set1.add("AB");
set1.add("BC");
map1.put("ABCD",set1);

Map<String, Set<String>> map2 = new HashMap<>();
Set<String> set2 =new HashSet<>();
set2.add("CD");
set2.add("EF");
map2.put("ABCD",set2);

map1.putAll(map2);

所以这里的键是相同的。我知道如果键相同,putAll将覆盖值

但是我正在寻找类似的输出

{ABCD=[AB,BC,CD,ED]}

如果有人可以帮助我解决,将非常感激。

hev1;

您可以利用提供给该合并功能的合并功能来Collectors.toMap指定如何处理Streams中重复键的值。演示版

final Map<String, Set<String>> map3 = Stream.concat(map1.entrySet().stream(), map2.entrySet().stream())
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                (a, b) -> Stream.concat(a.stream(), b.stream()).collect(Collectors.toSet())));

您可以使用来应用类似的方法Map#merge演示版

final Map<String, Set<String>> map3 = new HashMap<>(map1);
map2.forEach((key, val) -> map3.merge(key, val,
        (a, b) -> Stream.concat(a.stream(), b.stream()).collect(Collectors.toSet())));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章