<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 山風小子 閱讀(1271) 評論(5)  編輯  收藏 所屬分類: Groovy & Grails
    主站蜘蛛池模板: 成年人网站在线免费观看| 最近2018中文字幕免费视频| 亚洲国产精品成人午夜在线观看| 国产99视频精品免费专区| 88av免费观看入口在线| 亚洲另类激情综合偷自拍 | 亚洲日本天堂在线| 国产在线国偷精品产拍免费| 亚洲人成无码网WWW| 国产精品亚洲片在线观看不卡| 成在线人视频免费视频| 免费v片在线观看视频网站| 亚洲视频免费在线看| 99在线在线视频免费视频观看 | 亚洲国产第一页www| 69视频免费在线观看| 亚洲AV综合色区无码二区偷拍| 成人免费午夜无码视频| 在线a亚洲老鸭窝天堂av高清| 香蕉高清免费永久在线视频| 国产亚洲精品精华液| 日韩精品无码专区免费播放| 91亚洲国产成人精品下载| 人禽杂交18禁网站免费| 亚洲成av人无码亚洲成av人| 国产老女人精品免费视频 | 成人性做爰aaa片免费看| 中文字幕亚洲综合久久2| 思思re热免费精品视频66| 亚洲AV无码一区二区三区久久精品| 国产精品极品美女免费观看| 国产乱子伦精品免费视频| 亚洲国产精品国自产拍电影| 日韩在线播放全免费| 国产精品成人亚洲| 国产V亚洲V天堂无码久久久| 天天影视色香欲综合免费| 国产99久久亚洲综合精品| 久久精品国产亚洲av四虎| 久久精品免费一区二区喷潮| 一级特黄特色的免费大片视频|