<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
    主站蜘蛛池模板: 无码国模国产在线观看免费| 亚洲精品无码成人AAA片| 春意影院午夜爽爽爽免费| 国产亚洲婷婷香蕉久久精品 | 久久国产精品亚洲一区二区| 亚洲精品中文字幕无码蜜桃| 99久久久国产精品免费牛牛| 亚洲国产美女精品久久久| 久久精品亚洲一区二区 | 国产成人麻豆亚洲综合无码精品 | 日本亚洲中午字幕乱码| 亚洲av无码成h人动漫无遮挡| 欧美好看的免费电影在线观看| 免费一级毛片在线播放放视频 | a在线视频免费观看| 亚洲男人的天堂网站| 国产A在亚洲线播放| 破了亲妺妺的处免费视频国产| 花蝴蝶免费视频在线观看高清版 | 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 亚洲国产一区在线观看| 国产精品亚洲mnbav网站| 97在线观免费视频观看| 青青青国产手机频在线免费观看 | 亚洲好看的理论片电影| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 大地资源在线资源免费观看| 亚洲国产精品ⅴa在线观看| 亚洲宅男永久在线| 亚洲乱码精品久久久久..| 国产精品极品美女免费观看| 国产国产人免费视频成69堂| 三年在线观看免费观看完整版中文| 亚洲欧美第一成人网站7777| 色拍自拍亚洲综合图区| 亚洲色婷婷一区二区三区| 亚洲&#228;v永久无码精品天堂久久 | 中文字幕亚洲综合久久2| 国产亚洲精品高清在线| 国产乱子伦片免费观看中字| 免费无码又黄又爽又刺激|