groovy
Opérateur d'épandage
Recherche…
Remarques
Dans la plupart des cas, l'opérateur de propagation *.
est identique à l'appel à .collect { it.________ }
.
def animals = ['cat', 'dog', 'fish']
assert animals*.length() == animals.collect { it.length() }
Mais si le sujet est nul, ils se comportent différemment:
def animals = null
assert animals*.length() == null
assert animals.collect { it.length() } == []
Appeler une méthode
assert ['cat', 'dog', 'fish']*.length() == [3, 3, 4]
Notez que lors du mélange de types dans la collection si la méthode n'existe pas sur certains éléments, une groovy.lang.MissingMethodException
peut être groovy.lang.MissingMethodException
:
['cat', 'dog', 'fish',3]*.length()
// it throws groovy.lang.MissingMethodException: No signature of method: java.lang.Integer.length()
Accéder à une propriété
class Vector {
double x
double y
}
def points = [
new Vector(x: 10, y: -5),
new Vector(x: -17.5, y: 3),
new Vector(x: -3.3, y: -1)
]
assert points*.x == [10, -17.5, -3.3]
Note: Le *
est optionnel. Nous pourrions également écrire l'instruction ci-dessus comme dans la ligne ci-dessous et le compilateur Groovy serait toujours content.
assert points.x == [10, -17.5, -3.3]
Son null-safe
S'il existe un objet null
sur la collection, il ne génère pas de NPE
, mais renvoie une valeur null
:
assert ['cat', 'dog', 'fish', null]*.length() == [3, 3, 4, null]
En l'utilisant directement dans un objet null
, il est également null-safe:
def nullCollection = null
assert nullCollection*.length() == null
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow