闭包 闭包是很多动态语言提供的一个很方便的功能它有点像Java中的内部类不同的是闭包中只有一个方法但这个方法可以有任意个参数 java 代码 def closure = { param > println(hello ${param}) }closurecall(world!) 这段代码会输出hello world 闭包用{}括起>前面是参数后面是处理语句可以使用call调用也可以在{}后直接使用()来执行 闭包可以有多个参数各个参数用隔开如果只有一个参数的话可以省略不写可以使用关键字it来代表 我们可以把上面的例子像下面这样写 java 代码 closure = { println(hello ${it}) }(world) 或者 java 代码 closure = { paramparam>println(param+param) }(hello world) 上面的几种写法都会输出hello world 集合 ()List java 代码 def list = [ hello new javautilDate()]assert listsize() == assert list[]==assert listget() == hello ()Map java 代码 def map = [name:James location:London]assert mapsize() == assert mapget(name) == Jamesassert map[location]==London ()循环 java 代码 def list = [ ]for (i in list) {print i}println()listeach{item>print item}println()[name:yanhuaaddr:beijing]each{println it}[name:yanhuaaddr:beijing]each{keyvalue>println ${key} ^_^ ${value}} 上面的运行的结果如下
name=yanhua addr=beijing name ^_^ yanhua addr ^_^ beijing ()collect 遍历集合逐个传递给闭包处理后的结果返回给对应的项 java 代码 def value = [ llect { it * }assert value == [ ] ()find 根据闭包断言返回集合中找到的第一个项目 java 代码 def value = [ ]find { it > } assert value == ()findAll 根据闭包断言返回集合中所有找到的项目 java 代码 def value = [ ]findAll { it > } assert value == [ ] ()inject 遍历集合第一次将传递的值和集合项目传给闭包将处理结果作为传递的值和下一个集合项目传给闭包依此类推 java 代码 def value = [ ]inject(counting: ) { str item > str + item }assert value == counting: value = [ ]inject() { count item > count + item }assert value == ()every 如果集合中所有项目都匹配闭包断言就返回true否则返回false java 代码 def value = [ ]every { it < }assert valuevalue = [ ]every { item > item < }assert ! value ()any 如果集合中任何项目匹配闭包断言就返回true否则返回false java 代码 def value = [ ]any { it > }assert valuevalue = [ ]any { item > item > }assert value == false ()min/max 返回集合中的最小/最大项目(对象必须可比较) java 代码 def value = [ ]max()assert value == value = [ ]min()assert value == value = [x y a z]min()assert value == a ()join 连接集合中的值成一个字符串 java 代码 def value = [ ]join()assert value == |