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)"
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()));
Utilisez Iterator.remove ().