如何从 HashMap 中删除一个键,同时对其进行迭代?

我有 HashMap称为 testMap,其中包含 String, String

HashMap<String, String> testMap = new HashMap<String, String>();

迭代映射时,如果 value与指定的字符串匹配,则需要从映射中删除键。

也就是说。

for(Map.Entry<String, String> entry : testMap.entrySet()) {
if(entry.getValue().equalsIgnoreCase("Sample")) {
testMap.remove(entry.getKey());
}
}

testMap包含 "Sample",但是我无法从 HashMap中移除密钥。 < br > 取而代之的是错误:

"Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)"
170552 次浏览

试试:

Iterator<Map.Entry<String,String>> iter = testMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String,String> entry = iter.next();
if("Sample".equalsIgnoreCase(entry.getValue())){
iter.remove();
}
}

在 Java 1.8及以后的版本中,你只需要一行代码就可以完成以上步骤:

testMap.entrySet().removeIf(entry -> "Sample".equalsIgnoreCase(entry.getValue()));