web-dev-qa-db-fra.com

Comment supprimer une clé de HashMap en effectuant une itération dessus?

J'ai HashMap appelé testMap qui contient String, String.

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

Lors de l'itération de la carte, si value correspond à la chaîne spécifiée, je dois supprimer la clé de la carte.

c'est à dire.

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

testMap contient "Sample" mais je ne parviens pas à retirer la clé de HashMap.
Au lieu d’obtenir une erreur:

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

Essayer:

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

Avec Java 1.8 et versions ultérieures, vous pouvez effectuer les opérations ci-dessus en une seule ligne:

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