web-dev-qa-db-fra.com

Supprimer les éléments nuls d'une liste dans Groovy

Quelle est la meilleure façon de supprimer des éléments nuls d'une liste dans Groovy?

ex: [null, 30, null]

veux retourner: [30]

53
RyanLynch

voici une réponse si vous ne souhaitez pas conserver la liste d'origine

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

    list.removeAll([null])

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

dans un test unitaire dandy pratique

73
hvgotcodes

Utilisez simplement moins:

[null, 30, null] - null
118
Sergei

La méthode findAll devrait faire ce dont vous avez besoin.

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

Je pense que vous constaterez que c'est la plus courte, en supposant que cela ne vous dérange pas que d'autres "fausses" valeurs disparaissent également:

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

public collection findAll () Recherche les éléments correspondant à la fermeture IDENTITY (c'est-à-dire correspondant à Groovy vérité). Exemple:

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

11
Dino Fancellu

Ceci peut également être réalisé par grep :

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

ou

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

ou

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

Cela effectue une suppression sur place de tous les éléments nuls.

myList.removeAll { !it }

Si le numéro 0 est dans votre domaine, vous pouvez vérifier contre null

myList.removeAll { it == null }
2
B. Anderson

Tout simplement [null].findAll{null != it} si it est null alors il retourne false donc il n'existera pas dans la nouvelle collection.

2
Kasper Ziemianek

Une autre façon de procéder est [null, 20, null].findResults{it}.

1
Anonymous1