Удалить ключ / значение из карты во время итерации

Я создаю такую ​​карту:

def myMap = [:]

Карта - это, по сути, объект для ключа и int для значения. Когда я перебираю карту, я отменяю значение, а если оно равно 0, я удаляю его. Я уже пробовал myMap.remove () , но получаю ConcurrentModificationError - что достаточно справедливо. Поэтому я перехожу к использованию it.remove () , что дает мне странные результаты.

По сути, мой код таков:

myMap.each {
    it.value--;

    if( it.value <= 0 )
        it.remove();
}

Достаточно просто. Моя проблема в том, что если я напечатаю myMap.size () до и после удаления, они будут одинаковыми. Если я вызываю myMap.containsKey (key) , он дает мне true , ключ все еще там.

Но , если я распечатаю карту следующим образом:

myMap.each { System.out.println( "$it.key: $it.value" ); }

Я ничего не получу и вызову myMap.keySet () и myMap.values ​​() возврат пустой.

Кто-нибудь знает, что происходит?

6
задан Mat 6 October 2011 в 09:10
поделиться