web-dev-qa-db-fra.com

Obtenez le premier élément d'une liste de manière idiomatique dans Groovy

Laissez le code parler en premier

def bars = foo.listBars()
def firstBar = bars ? bars.first() : null
def firstBarBetter = foo.listBars()?.getAt(0)

Existe-t-il une manière plus élégante ou idiomatique d'obtenir le premier élément d'une liste, ou null si ce n'est pas possible? (Je ne considérerais pas un bloc try-catch comme élégant ici.)

31
Adam Schmideg

Je ne suis pas sûr que l'utilisation de find soit la plus élégante ou idiomatique, mais elle est concise et ne générera pas d'exception IndexOutOfBoundsException.

def foo 

foo = ['bar', 'baz']
assert "bar" == foo?.find { true }

foo = []
assert null == foo?.find { true }

foo = null
assert null == foo?.find { true }
56
John Wagenleitner

Vous pourriez aussi faire

foo[0]

Cela lèvera une NullPointerException lorsque foo est nul, mais cela retournera une valeur nulle sur une liste vide, contrairement à foo.first() qui lèvera une exception sur vide.

16
James McMahon

Depuis Groovy 1.8.1, nous pouvons utiliser les méthodes take () et drop (). Avec la méthode take () nous obtenons des éléments depuis le début de la liste. Nous passons le nombre d'éléments que nous voulons comme argument à la méthode.

Pour supprimer des éléments du début de la liste, nous pouvons utiliser la méthode drop (). Passez le nombre d'éléments à déposer comme argument à la méthode.

Notez que la liste d'origine n'est pas modifiée, le résultat de la méthode take ()/drop () est une nouvelle liste.

def a = [1,2,3,4]

println(a.drop(2))
println(a.take(2))
println(a.take(0))
println(a)

*******************
Output:
[3, 4]
[1, 2]
[]
[1, 2, 3, 4]
2
Here_2_learn