我需要按照以下规则在第一个地图中合并两个地图:

我需要从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进行操作。

09-28 01:38