У меня есть простой фрагмент кода, который проходит по карте, проверяет условие для каждой записи и выполняет метод для записи, если это условие истинно. После этого запись удаляется с карты.
Чтобы удалить запись с карты, я использую Iterator
, чтобы избежать ConcurrentModificationException
.
Кроме моего кода выдает исключение, в строке it.remove()
:
Caused by: java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.remove(Unknown Source) ~[?:1.8.0_161]
at package.Class.method(Class.java:34) ~[Class.class:?]
После долгого поиска я не могу найти способ исправить это, во всех ответах предлагается использовать метод Iterator.remove()
, но я уже использую его. В документации для Map.entrySet()
четко указано, что можно удалить элементы из набора, используя метод Iterator.remove()
.
Любая помощь будет принята с благодарностью.
Мой код:
Iterator<Entry<K, V>> it = map.entrySet().iterator();
while (it.hasNext()) {
Entry<K, V> en = it.next();
if (en.getValue().shouldRun()) {
EventQueue.invokeLater(()->updateSomeGui(en.getKey())); //the map is in no way modified in this method
en.getValue().run();
it.remove(); //line 34
}
}