Ricerca…


Osservazioni

Nella maggior parte dei casi, l'operatore di spread *. è identico a chiamare .collect { it.________ } .

def animals = ['cat', 'dog', 'fish']
assert animals*.length() == animals.collect { it.length() }

Ma se il soggetto è nullo, si comportano in modo diverso:

def animals = null
assert animals*.length() == null
assert animals.collect { it.length() } == []

Chiamare un metodo

assert ['cat', 'dog', 'fish']*.length() == [3, 3, 4]

Si noti che quando si mescolano i tipi nella raccolta se il metodo non esiste su alcuni elementi, è possibile 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()

Accedere a una proprietà

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: il * è opzionale. Potremmo anche scrivere la dichiarazione di cui sopra come nella riga sottostante e il compilatore Groovy ne sarebbe comunque felice.

assert points.x == [10, -17.5, -3.3]

È nullo

Se c'è un oggetto null nella raccolta non getta un NPE , restituisce invece un valore null :

assert ['cat', 'dog', 'fish', null]*.length() == [3, 3, 4, null]

Usandolo direttamente in un oggetto null è anche nullo:

def nullCollection = null
assert nullCollection*.length() == null


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow