Подтвердить что ты не робот

Groovy удалить элемент коллекции во время итерации

Есть ли способ Groovy удалить элемент Collection во время итерации? В Java это выполняется с помощью Iterator.remove():

Collection collection = ...
for (Iterator it=collection.iterator(); it.hasNext(); ) {
    Object obj = it.next();
    if (should remove) {
        it.remove();
    }
}

Предоставляет ли Groovy удаление-while-iterating в синтаксисе языка или я использую Iterator.remove()?

4b9b3361

Ответ 1

Используйте removeAll().

> c = [1, 2, 3, 4, 5]
> c.removeAll { it % 2 == 0 }
> println c
[1, 3, 5]

Вы спрашиваете конкретно о "while iterating", пытаетесь ли вы что-то сделать с каждым объектом? removeAll все еще работает до тех пор, пока последнее утверждение закрытия по-прежнему правдиво/ложно (как и раньше):

> c.removeAll { 
*     tmp = it * 10
*     println "ohai ${it}*10=${tmp}"
*     tmp >= 40
* }
ohai 1*10=10
ohai 2*20=20
ohai 3*30=30
ohai 4*40=40
ohai 5*50=50
> println c
[1, 2, 3]

Значение возврата закрытия (значение последнего оператора или явное значение return) является правдивым/ложным, оно будет использоваться для определения того, что должно быть удалено. Он не должен явно ссылаться на каждый объект.