Каков наилучший способ удаления пустых элементов из списка в Groovy?
например: [null, 30, null]
[null, 30, null]
хочу вернуть: [30]
[30]
Просто используйте минус:
[null, 30, null] - null
вот ответ, если вы не хотите сохранять оригинальный список
void testRemove() { def list = [null, 30, null] list.removeAll([null]) assertEquals 1, list.size() assertEquals 30, list.get(0) }
в удобном модульном тесте денди
Метод findAll должен делать то, что вам нужно.
[null, 30, null].findAll {it != null}
Я думаю, вы обнаружите, что это самое короткое, при условии, что вы не возражаете против исчезновения других «ложных» значений:
println([null, 30, null].findAll())
public Collection findAll () Находит элементысоответствие IDENTITY Closure (т.е. соответствие Groovy правде).Пример: def items = [1, 2, 0, false, true, '', 'foo', [], [4, 5], null] assert items.findAll () == [1, 2, правда, 'foo', [4, 5]]
public Collection findAll () Находит элементысоответствие IDENTITY Closure (т.е. соответствие Groovy правде).Пример:
def items = [1, 2, 0, false, true, '', 'foo', [], [4, 5], null] assert items.findAll () == [1, 2, правда, 'foo', [4, 5]]
Этого также можно достичь с помощью grep :
assert [null, 30, null].grep() == [30]
или
assert [null, 30, null].grep {it} == [30]
assert [null, 30, null].grep { it != null } == [30]
Это удаляет все пустые элементы на месте.
myList.removeAll { !it }
Если число 0 находится в вашем домене, вы можете проверить против нуля
myList.removeAll { it == null }
Просто [null].findAll{null != it}, если it равно нулю, возвращается false, поэтому его не будет в новой коллекции.
[null].findAll{null != it}
it
Еще один способ сделать это - [null, 20, null].findResults{it}.
[null, 20, null].findResults{it}