HashMap を反復処理しながらキーを削除するにはどうすればいいですか? [重複] 質問する

HashMap を反復処理しながらキーを削除するにはどうすればいいですか? [重複] 質問する

を含む をHashMap呼び出しています。testMapString, 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 以降では、上記の処理を 1 行で実行できます。

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

おすすめ記事