闭包(Closure)是Java所不具备的语法结构。闭包就是一个代码块,用 { } 包起来。此时,程序代码也就成了数据,可以被一个变量所引用。闭包的最典型应用是实现回调函数calback。
1、闭包的定义
闭包的创建过程如下
{ 参数 ->
代码...
}
def c1 = {println it} def c2 = {text-> println text} c1.call('test content') // 用call方法调用闭包 c2('test content') // 直接调用闭包-> 之前的部分为闭包的参数,如果存在多个参数,之间可用逗号分割。如果省略了->,可以用名为 it 的变量访问参数。
闭包的返回至,如果有return语句,则返回值是return语句后面的内容;如果没有return,则闭包的最后一行代码就是返回值。
2、闭包在GDK中的使用
a、each方法
进行遍历,每次取得集合的一个元素传入闭包
def xxx = "" (1..10).each{ xxx += it } // xxx 的结果为”12345678910“ def yyy = [key1:"value1",key2:'value2'] yyy.each{elem -> println entry.key }b、findAll方法
遍历集合,每次取得集合的一个元素,传入闭包,将能使闭包返回真的元素组成一个新的集合。
[1,3,5,7].findAll{it > 4} // 返回结果为[5,7]c、collect方法
遍历集合,将闭包的返回值构成一个新的集合
[1,7].collect{ it * it } // 返回结果为[1,9,25,49]d、any方法
遍历集合,若有一个元素能使闭包返回真,则立即返回真
[1,7].any{ it * it == it + 6 } // 结果为true,并且不进行下面的遍历e、every方法
遍历集合,弱全部元素都能使闭包返回真,则返回真
同d中的示例代码,返回false