groovy
Operador de propagación
Buscar..
Observaciones
En la mayoría de los casos, el operador de propagación *.
es idéntico a llamar a .collect { it.________ }
.
def animals = ['cat', 'dog', 'fish']
assert animals*.length() == animals.collect { it.length() }
Pero si el tema es nulo, se comportan de manera diferente:
def animals = null
assert animals*.length() == null
assert animals.collect { it.length() } == []
Llamando a un método
assert ['cat', 'dog', 'fish']*.length() == [3, 3, 4]
Tenga en cuenta que al mezclar tipos en la colección, si el método no existe en algunos de los elementos, se podría groovy.lang.MissingMethodException
una groovy.lang.MissingMethodException
:
['cat', 'dog', 'fish',3]*.length()
// it throws groovy.lang.MissingMethodException: No signature of method: java.lang.Integer.length()
Acceso a una propiedad
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]
Nota: El *
es opcional. También podríamos escribir la declaración anterior como en la línea siguiente y el compilador Groovy todavía estaría contento con eso.
assert points.x == [10, -17.5, -3.3]
Su nulo seguro
Si hay un objeto null
en la colección, no lanza un NPE
, en su lugar devuelve un null
:
assert ['cat', 'dog', 'fish', null]*.length() == [3, 3, 4, null]
Usándolo directamente en un objeto null
también es seguro para nulos:
def nullCollection = null
assert nullCollection*.length() == null
Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow