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

Удалите нулевые элементы из списка в Groovy

Каков наилучший способ удаления нулевых элементов из списка в Groovy?

ex: [null, 30, null]

хотите вернуться: [30]

4b9b3361

Ответ 1

вот ответ, если вы не хотите сохранить исходный список

void testRemove() {
    def list = [null, 30, null]

    list.removeAll([null])

    assertEquals 1, list.size()
    assertEquals 30, list.get(0)
}

в удобном dandy unit test

Ответ 2

Просто используйте минус:

[null, 30, null] - null

Ответ 3

Метод findAll должен делать то, что вам нужно.

​[null, 30, null]​.findAll {it != null}​

Ответ 4

Я думаю, вы обнаружите, что это кратчайший, предполагая, что вы не возражаете против других "ложных" значений, также исчезающих:

println([null, 30, null].findAll())

public Collection findAll() Поиск элементов, соответствующих IDENTITY Закрытие (т.е. Соответствие истине Groovy). Пример:

def items = [1, 2, 0, false, true, '', 'foo', [], [4, 5], null] assert items.findAll() == [1, 2, true, 'foo', [4, 5]]

Ответ 5

Это также может быть достигнуто grep:

assert [null, 30, null].grep()​ == [30]​

или

assert [null, 30, null].grep {it}​ == [30]​

или

assert [null, 30, null].grep { it != null } == [30]​

Ответ 6

Просто [null].findAll{null != it}, если it равно null, тогда он возвращает false, поэтому он не будет существовать в новой коллекции.

Ответ 7

Другой способ сделать это - [null, 20, null].findResults{it}.

Ответ 8

Это делает удаление всех нулевых элементов.

myList.removeAll { !it }

Если число 0 находится в вашем домене, вы можете проверить его на null

myList.removeAll { it == null }