如果你知道你没有重复键,或者你想在map2
值从map1
的重复键覆盖值,你可以只写
map3 = new HashMap<>(map1);
map3.putAll(map2);
如果您需要在如何更好地控制值合并后,可以使用Map.merge
,在Java 8中添加,它使用用户提供的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
Collectors。如果你在一个循环中重复合并地图,你可能会重构你的计算以使用流,这既能够澄清你的代码,又能使用并行流和并发采集器来实现简单的并行处理。
你还没有说明你想要发生什么,如果一个密钥存在这两个地图。 – 2013-12-16 01:05:34
Java 8有map1.merge(map2) – 2015-04-08 23:56:06
@SambitTripathy,你有关于该文档的链接吗?我似乎无法找到它。 – JohnK 2016-08-05 20:54:16