Удалить нулевые элементы из списка в Groovy - PullRequest
53 голосов
/ 20 июля 2010

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

например: [null, 30, null]

хочу вернуть: [30]

Ответы [ 8 ]

115 голосов
/ 11 марта 2011

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

[null, 30, null] - null
71 голосов
/ 20 июля 2010

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

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

    list.removeAll([null])

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

в удобном модульном тесте денди

48 голосов
/ 20 июля 2010

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

​[null, 30, null]​.findAll {it != null}​
11 голосов
/ 02 февраля 2013

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

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]]

7 голосов
/ 17 января 2015

Этого также можно достичь с помощью grep :

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

или

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

или

assert [null, 30, null].grep { it != null } == [30]​
2 голосов
/ 13 июня 2017

Это удаляет все пустые элементы на месте.

myList.removeAll { !it }

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

myList.removeAll { it == null }
2 голосов
/ 19 марта 2014

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

1 голос
/ 28 сентября 2016

Еще один способ сделать это - [null, 20, null].findResults{it}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...