閉包
閉包是很多動態語言提供的一個很方便的功能它有點像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) == James
assert 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 value
value = [ ]every { item > item < }
assert ! value
()any
如果集合中任何項目匹配閉包斷言就返回true否則返回false
java 代碼
def value = [ ]any { it > }
assert value
value = [ ]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 ==
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26029.html