如果您知道没有重复的键,或者您希望 中的值覆盖重复键的值,则只需编写map2
map1
map3 = new HashMap<>(map1);
map3.putAll(map2);
如果需要更好地控制值的组合方式,可以使用 Java 8 中添加的 Map.merge
,它使用用户提供的用于合并重复键的值。 对单个键和值进行操作,因此您需要使用循环 或 .在这里,我们连接重复键的字符串:BiFunction
merge
Map.forEach
map3 = new HashMap<>(map1);
for (Map.Entry<String, String> e : map2.entrySet())
map3.merge(e.getKey(), e.getValue(), String::concat);
//or instead of the above loop
map2.forEach((k, v) -> map3.merge(k, v, String::concat));
如果您知道自己没有重复的键并希望强制执行它,则可以使用合并函数来引发 :AssertionError
map2.forEach((k, v) ->
map3.merge(k, v, (v1, v2) ->
{throw new AssertionError("duplicate values for key: "+k);}));
从这个特定问题退后一步,Java 8流库提供了和收集器。如果在循环中重复合并映射,则可以重构计算以使用流,这既可以阐明代码,又可以使用并行流和并发收集器实现轻松并行。toMap
groupingBy