如何在迭代时从HashMap中删除密钥?

2022-08-31 06:51:50

我正在调用哪个包含.HashMaptestMapString, 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

"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)"

答案 1

尝试:

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()));

答案 2