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.)
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 }
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.
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]