【发布时间】:2016-11-25 13:05:38
【问题描述】:
我有两个 HashMap,其中键是字符串,值是 ArrayList。我需要以这样的方式合并这两个地图,如果 --
- 如果 key 不存在,则应该使用给定的值映射 key。
- 如果 key 已经存在,我希望将现有值与新值合并,即 existingList.addAll(newList)。
初始代码有点像 --
为map的所有键检查是否
if (map1.containsKey("key")){
List l = map1.get ("key");
l.addAll(map2.get("key"));
}
else{
map1.put(map2);
}
我不关心这里的重复元素。有没有一种干净的方法可以做到这一点?我已经阅读了 Java 8 中引入的合并方法。但是由于这里的值是 List 类型,我正在寻找一种更有效和更干净的方法。
【问题讨论】:
-
我建议您完全按照您描述的方式编写它。然后你可以随时重构它。
-
你能添加你第一次尝试的代码吗?基于此,讨论清洁度和效率会容易得多
-
我不确定您所说的“我不关心这里的重复元素”是什么意思。除此之外,
merge似乎是要走的路,即map2.forEach((k,v)->map1.merge(k, v, (l1,l2)->{ l1.addAll(l2); return l1; })); -
编辑建议的更改。
-
@Holger 我不关心列表中的重复项,我的意思是。谢谢你的建议顺便说一句。我会试试看。
标签: java collections java-8