<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    First they ignore you
    then they ridicule you
    then they fight you
    then you win
        -- Mahatma Gandhi
    Chinese => English     英文 => 中文             
    隨筆-221  評論-1047  文章-0  trackbacks-0

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

    關鍵字: ? Groovy????
    1、閉包
    閉包是很多動態語言提供的一個很方便的功能,它有點像Java中的內部類,不同的是閉包中只有一個方法,但這個方法可以有任意個參數。
    java 代碼
    ?
    1. def?closure?=?{?param?->?println("hello?${param}")?}??
    2. closure.call("world!")??
    這段代碼會輸出”hello world”。
    • 閉包用“{}”括起,“->”前面是參數,后面是處理語句,可以使用call調用,也可以在“{}”后直接使用“()”來執行。
    • 閉包可以有多個參數,各個參數用“,”隔開。如果只有一個參數的話可以省略不寫,可以使用關鍵字“it”來代表。
    我們可以把上面的例子像下面這樣寫:
    java 代碼
    ?
    1. closure?=?{?println("hello?${it}")?}('world')??
    或者
    java 代碼
    1. closure?=?{?param1,param2->??
    2. ????????println(param1+param2)?}('hello?','world')??
    上面的幾種寫法都會輸出“hello world”。

    2、集合
    (1)List
    java 代碼
    ?
    1. def?list?=?[1,?2,?'hello',?new?java.util.Date()]??
    2. assert?list.size()?==?4??
    3. assert?list[1]==2??
    4. assert?list.get(2)?==?'hello'??
    (2)Map
    java 代碼
    ?
    1. def?map?=?['name':'James',?'location':'London']??
    2. assert?map.size()?==?2??
    3. assert?map.get('name')?==?'James'??
    4. assert?map['location']=='London'??
    (3)循環
    java 代碼
    ?
    1. def?list?=?[1,?2,?3]??
    2. for?(i?in?list)?{???
    3. ????print?i???
    4. }??
    5. println()??
    6. ??
    7. list.each{item->??
    8. ????print?item??
    9. }??
    10. println()??
    11. ??
    12. ['name':'yanhua','addr':'beijing'].each{println?it}??
    13. ['name':'yanhua','addr':'beijing'].each{key,value->println?"${key}?^_^?${value}"}??
    上面的運行的結果如下:
    123
    123
    name=yanhua
    addr=beijing
    name ^_^ yanhua
    addr ^_^ beijing
    (4)collect
    遍歷集合,逐個傳遞給閉包,處理后的結果返回給對應的項。
    java 代碼
    1. def?value?=?[1,?2,?3].collect?{?it?*?2?}??
    2. assert?value?==?[2,?4,?6]??
    (5)find
    根據閉包斷言,返回集合中找到的第一個項目。
    java 代碼
    1. def?value?=?[1,?2,?3].find?{?it?>?1?}??
    2. assert?value?==?2??
    (6)findAll
    根據閉包斷言,返回集合中所有找到的項目。
    java 代碼
    1. def?value?=?[1,?2,?3].findAll?{?it?>?1?}??
    2. assert?value?==?[2,?3]??
    (7)inject
    遍歷集合,第一次將傳遞的值和集合項目傳給閉包,將處理結果作為傳遞的值,和下一個集合項目傳給閉包,依此類推。
    java 代碼
    1. def?value?=?[1,?2,?3].inject('counting:?')?{?str,?item?->?str?+?item?}??
    2. assert?value?==?"counting:?123"??
    3. value?=?[1,?2,?3].inject(0)?{?count,?item?->?count?+?item?}??
    4. assert?value?==?6??
    (8)every
    如果集合中所有項目都匹配閉包斷言,就返回true,否則返回false。
    java 代碼
    1. def?value?=?[1,?2,?3].every?{?it?<?5?}??
    2. assert?value??
    3. value?=?[1,?2,?3].every?{?item?->?item?<?3?}??
    4. assert?!?value??
    (9)any
    如果集合中任何項目匹配閉包斷言,就返回true,否則返回false。
    java 代碼
    1. def?value?=?[1,?2,?3].any?{?it?>?2?}??
    2. assert?value??
    3. value?=?[1,?2,?3].any?{?item?->?item?>?3?}??
    4. assert?value?==?false??
    (10)min/max
    返回集合中的最小/最大項目(對象必須可比較)。
    java 代碼
    1. def?value?=?[9,?4,?2,?10,?5].max()??
    2. assert?value?==?10??
    3. value?=?[9,?4,?2,?10,?5].min()??
    4. assert?value?==?2?
    5. value?=?['x',?'y',?'a',?'z'].min()??
    6. assert?value?==?'a'??
    (11)join
    連接集合中的值成一個字符串。
    java 代碼
    1. def?value?=?[1,?2,?3].join('-')??
    2. assert?value?==?'1-2-3'??

    本文參考了http://blog.csdn.net/chenyun2000/archive/2004/09/15/104971.aspx這篇文章,針對Groovy1.0做了一些修改和擴充。

    原文地址:http://yanhua.javaeye.com/blog/68164
    附:朝花夕拾——Groovy & Grails
    posted on 2007-05-13 20:14 山風小子 閱讀(1276) 評論(5)  編輯  收藏 所屬分類: Groovy & Grails
    主站蜘蛛池模板: 人妻18毛片a级毛片免费看| 亚洲第一成年网站大全亚洲| 亚洲午夜无码久久| 亚洲性线免费观看视频成熟 | 亚洲黄色在线观看| 91精品免费不卡在线观看| 亚洲欧洲日韩不卡| 97视频免费观看2区| 亚洲黄色片在线观看| 在线观看H网址免费入口| 亚洲丰满熟女一区二区v| 两性刺激生活片免费视频| 亚洲午夜精品在线| 国内自产少妇自拍区免费| 亚洲色偷偷色噜噜狠狠99网| 国产免费黄色大片| 国产高清对白在线观看免费91| 亚洲综合最新无码专区| a级日本高清免费看| 亚洲视频免费在线观看| 1000部夫妻午夜免费| 亚洲成人激情小说| 亚洲A∨精品一区二区三区| 久久久久久久国产免费看| 亚洲网址在线观看你懂的| 97人妻无码一区二区精品免费| 久久乐国产综合亚洲精品| 国产免费无遮挡精品视频 | 国产亚洲精AA在线观看SEE| 亚洲最大黄色网址| 免费高清资源黄网站在线观看| 狠狠入ady亚洲精品| 免费h片在线观看网址最新| 日韩亚洲不卡在线视频中文字幕在线观看 | 最近免费中文字幕中文高清| 亚洲精品无码久久久久APP| 久久亚洲精品AB无码播放| 日韩亚洲翔田千里在线| 国产网站免费观看| 亚洲日本一线产区和二线产区对比| 免费人成在线观看网站视频|