Groovy adds a number of methods to java.lang.Object, most of which deal with types that serve as collections or aggregates, such as Lists or DOM Nodes.
Return Value |
Method |
Description |
|---|---|---|
Boolean |
any {closure} |
returns |
List |
collect {closure} |
returns a list of all items that were returned from the closure |
Collection |
collect(Collection collection) {closure} |
same as above, but adds each item to the given collection |
void |
each {closure} |
simply executes the closure for each item |
void |
eachWithIndex {closure} |
same as each{} except it passes two aruments: the item and the index |
Boolean |
every {closure} |
returns |
Object |
find {closure} |
returns the first item that matches the closure expression |
List |
findAll {closure} |
returns all items that match the closure expression |
Integer |
findIndexOf {closure} |
returns the index of the first item that matched the given expression |
See the GDK documentation on Object for the complete list of added methods.
Since the "return" keyword is optional in Groovy, closures in this context act as "predicates" and return the boolean result of whatever expression you given in your closure. These predicates allow you to apply perform operations on aggregate objects in a very concise manner.
def numbers = [ 5, 7, 9, 12 ]
assert numbers.any { it % 2 == 0 } //returns true since 12 is even
assert numbers.every { it > 4 } //returns true since all #s are > 4
assert numbers.findAll { it in 6..10 } == [7,9] //returns all #s > 5 and < 11
assert numbers.collect { ++it } == [6, 8, 10, 13] //returns a new list with each # incremented
numbers.eachWithIndex{ num, idx -> println "$idx: $num" } //prints each index and number
|