Uma closure em Groovy é um bloco de código ou um ponteiro de método. É um pedaço de código que é definido em um dado momento e executado em um ponto posterior.
Exemplo de closure em Groovy:
def clos = { println "hello! }
println "Executing the closure:"
clos() // Imprime: "hello!"
No exemplo acima, note que “hello!” é impresso quando a closure é chamada, não quando ela é definida.
Os parâmetros da closure são listados antes de “->”, exemplo:
def clos = { a, b -> print a+b }
clos( 5, 7 ) // Imprime: "12"
O token “->” é opcional e pode ser omitido se sua definição de closure tem menos do que dois parâmetros.
Existe ainda uma variável implícita denominada “it”. Ela tem um significado especial. Se você tem uma closure que tem apenas um único argumento, você pode omitir a definição de parâmetro da closure, assim:
def clos = { print it }
clos("hi there") // Imprime: "hi there"
Além disso, quando um método tem uma closure como último parâmetro, você pode definir a closure inline. Observe:
def list = ['a','b','c','d']
def newList = []
list.collect( newList ) {
it.toUpperCase()
}
println newList // ["A", "B", "C", "D"]
Mas há outra forma de fazer isso. No exemplo abaixo, veja que o método collect aceita não só uma lista como também uma closure como parâmetro.
def list = ['a','b','c','d']
def newList = []
def clos = { it.toUpperCase() }
list.collect( newList, clos )
assert newList == ["A", "B", "C", "D"]
Enjoy!
Fonte: http://groovy.codehaus.org