java之在 Java 中合并两个 Map 值,如果键相同,则附加在 Java 7 或 Java 8 中不会覆盖的值
dyllove98
阅读:27
2025-01-19 22:14:33
评论:0
我想合并2个Map
,但是当key相同时,应该追加而不是覆盖值。
我们说
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]}
如果有人能帮我解决,将不胜感激。
请您参考如下方法:
您可以使用 Stream.concat
连接两个 map ,然后使用 groupingBy
map 键和值作为 Set 进行收集。
Map<String, Set<String>> res =
Stream.concat(map1.entrySet().stream(), map2.entrySet().stream())
.collect(Collectors.groupingBy(e-> e.getKey(),
Collectors.flatMapping(e -> e.getValue().stream(), Collectors.toSet())));
注意: 解决方案使用 Java 9+ flatMapping
或者
您可以使用 map 的merge
功能。这里将 map2
数据合并到 map1
map2.forEach((key, val) -> map1.merge(key, val, (a, b) -> {a.addAll(b); return a;}));
输出:{ABCD=[AB, BC, CD, EF]}
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。