class Person{
String firstName
String lastName
int age
int calc(){
return age * 2
}
}
def personList = [
new Person(firstName: "dhaval", lastName: "nagar", age: 25),
new Person(firstName: "nachiket", lastName: "patel", age: 24)
]
To access the firstName property one can use either of the operators:
println personList.firstName
// ["dhaval", "nachiket"]
println personList*.firstName
// ["dhaval", "nachiket"]
To access the calc() method spread-dot operator has to be used, whereas dot operator will raise an exception:
println personList*.total()
// [50, 48]
Apart from the access restrictions both the operators works differently when collection contains null values like:
personList << null
personList << new Person(firstName: "sandeep", lastName: "shah", age: 30)
println personList.firstName
// ["dhaval", "nachiket", "sandeep"]
println personList*.firstName
// ["dhaval", "nachiket", null, "sandeep"]
The spread-dot operator will add the null value for each null element in the resulting list.
Both the operators works same when the list element is not null but the requested property is null.
personList.clear()
personList << new Person(firstName: "dhaval", lastName: "nagar", age: 25)
personList << new Person(lastName: "nagar", age: 25)
println personList.firstName
// ["dhaval", null]
println personList*.firstName
// ["dhaval", null]
To avoid such null values in the resulting list, grep expression can be used.
println personList.grep{it?.firstName}.firstName
// ["dhaval"]
Here grep will try to evaluate the true boolean condition, as per the Groovy Truth if an object is NULL it will be considered as FALSE. So above expression will reject all the objects where firstName property value is null.
No comments:
Post a Comment