1. ホーム
  2. java

[解決済み] HashMapの反復処理中にキーを削除する方法は?[重複している]

2022-04-23 01:25:50

質問

私は 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 .

その代わり、エラーが発生します。

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

解決方法は?

試してみてください。

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