使用merge()方法可高效合并Map,通过BiFunction处理键冲突。若key不存在则直接插入;存在时执行remappingFunction,如Integer::sum实现值相加。示例中map1合并map2后:"a"→1,"b"→5,"c"→4。支持多种策略:Math::max保留大值,字符串拼接用(oldVal, newVal)->oldVal+","+newVal,List合并则新建列表并添加所有元素。注意:返回null将删除键;操作修改原Map,需复制以保留原数据;并发环境推荐ConcurrentHashMap,其merge线程安全。该方法适用于统计、聚合场景,使代码更简洁高效。

在Java中,合并两个或多个Map是常见的操作。使用merge()方法可以高效地处理键冲突并实现自定义的值合并逻辑。这个方法属于Map接口,特别适用于需要对重复键的值进行聚合(如累加、拼接等)的场景。
merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
该方法的作用是:
虽然merge()是Map实例的方法,但通常我们结合循环来将一个Map的内容合并到另一个中。以下是一个典型示例:
立即学习“Java免费学习笔记(深入)”;
Map<String, Integer> map1 = new HashMap<>();
map1.put("a", 1);
map1.put("b", 2);
Map<String, Integer> map2 = new HashMap<>();
map2.put("b", 3);
map2.put("c", 4);
// 将map2合并到map1中,相同key的值相加
for (Map.Entry<String, Integer> entry : map2.entrySet()) {
map1.merge(entry.getKey(), entry.getValue(), Integer::sum);
}
执行后结果为:
"a" → 1,
"b" → 5(2 + 3),
"c" → 4
这里使用了Integer::sum作为合并函数,你也可以写成(x, y) -> x + y。
除了数值相加,还可以根据需求自定义合并行为:
map1.merge(key, value, Math::max)
map1.merge(key, value, (oldVal, newVal) -> oldVal + "," + newVal)
Map<String, List<String>> map1 = new HashMap<>();
// 初始化map1中的list...
map2.forEach((key, value) ->
map1.merge(key, value, (list1, list2) -> {
List<String> result = new ArrayList<>(list1);
result.addAll(list2);
return result;
})
);
使用merge()时需注意:
null,则该key会被从Map中移除。ConcurrentHashMap,其merge()方法是线程安全的。基本上就这些。合理利用merge()能让Map合并更简洁、高效,尤其适合统计、累加类业务场景。
以上就是Java里如何使用merge合并Map元素_Map合并操作方法说明的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号