Как удалить ключ из HashMap, итерации по нему? - программирование

Как удалить ключ из HashMap, итерации по нему?

У меня есть 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)"
4b9b3361

Ответ 1

Try:

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 -> !TestMap.contains("Sample"));

Ответ 3

Чтобы удалить определенный ключ и элемент из hashmap, используйте

hashmap.remove(key)

полный исходный код похож на

import java.util.HashMap;
public class RemoveMapping {
     public static void main(String a[]){
        HashMap hashMap = new HashMap();
        hashMap.put(1, "One");
        hashMap.put(2, "Two");
        hashMap.put(3, "Three");
        System.out.println("Original HashMap : "+hashMap);
        hashMap.remove(3);   
        System.out.println("Changed HashMap : "+hashMap);        
    }
}

Источник: http://www.tutorialdata.com/examples/java/collection-framework/hashmap/remove-mapping-of-specified--key-from-hashmap