39 votes

Obtenir 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 façon 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 élégant ici.)

63voto

John Wagenleitner Points 6206

Pas sûr d'utiliser find est le plus élégant ou idiomatique, mais il est concis et ne jettera pas un IndexOutOfBoundsException.

def foo 

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

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

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

--Mettre à jour Groovy 1.8.1
vous pouvez simplement utiliser foo ?.find() sans la fermeture. Il renverra le premier élément Groovy Truth dans la liste ou NULL si foo est NULL ou si la liste est vide.

21voto

James McMahon Points 14356

Vous pouvez également faire

foo[0]

Cela lancera une exception NullPointerException lorsque foo est NULL, mais il renverra une valeur NULL sur une liste vide, contrairement foo.first() qui lancera une exception sur empty.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X