Как удалить ключ из 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)"
Ответы
Ответ 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"));
Ответ 2
Используйте Iterator.remove().
Ответ 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