以有效的方式从地图中删除多个键?

2022-08-31 07:45:55

我有一个具有大量键值对的。现在我想从中删除选定的键。下面的代码显示了我为实现这一目标所做的工作。Map<String,String>Map

Set keySet = new HashSet(); //I added keys to keySet which I want to remove. 

然后:

Iterator entriesIterator = keySet.iterator();
while (entriesIterator.hasNext()) {
   map.remove( entriesIterator.next().toString());
} 

这工作正常。什么是更好的方法?


答案 1

假设您的集合包含要删除的字符串,则可以使用 keySet 方法和 。map.keySet().removeAll(keySet);

keySet返回此映射中包含的键的 Set 视图。集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。

人为示例:

Map<String, String> map = new HashMap<>();
map.put("a", "");
map.put("b", "");
map.put("c", "");

Set<String> set = new HashSet<> ();
set.add("a");
set.add("b");

map.keySet().removeAll(set);

System.out.println(map); //only contains "c"

答案 2

为了完成,并且由于Google将您带到这里,因此当您寻找实现这一目标的方法时:

map.entrySet().removeIf(entry -> /* decide what you want to remove here */ );

这并不假设您有一组预定义的键要删除,而是假设您有一个应删除键的条件。从问题中可以看出,不清楚这些键是手动添加还是基于某种条件添加。在后一种情况下,这可能是更清晰的代码。

对于前一种情况,此(未经测试的)代码也可能有效:

map.entrySet().removeIf(entry -> keySet.contains(entry.getKey()) );

但显然,在这种情况下,@assylias提供的答案要干净得多!