熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

在Groovy1.0中使用閉包和集合

2013-11-23 18:56:51  來源: Java核心技術 

  閉包

  閉包是很多動態語言提供的一個很方便的功能它有點像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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.