我需要按照以下规则在第一个地图中合并两个地图:
我需要从map1
中删除所有不在map2
中的键。
我需要使用这些键下map1
中存在的适当值来更新map2
中的所有键。
这是我当前的代码:
Set<String> keysToRemove = new HashSet<>();
map1.forEach((k, v) -> {
if (!map2.containsKey(k)) {
keysToRemove.add(k);
} else {
map1.put(k, map2.get(k));
}
});
for (String k : keysToRemove) {
map1.remove(k);
}
我不确定我的代码是否最佳,是否可以改进。您能否说明如何更有效地执行此任务?
最佳答案
我认为您可以使用Iterator
删除第二个循环
Iterator<Map.Entry<K,V>> iter = map1.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<K,V> entry = iter.next();
if(not map2 contain k){
iter.remove();
} else {
entry.put new data
}
}
这里的关键是,您无法在循环遍历
Map.entrySet()
时更新地图,它将升高ConcurrentModificationException
,但是您可以使用Iterator
进行操作。