<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
    主站蜘蛛池模板: 精品亚洲国产成人av| 国产亚洲3p无码一区二区| 亚洲国产日韩在线观频| 国产亚洲成AV人片在线观黄桃| 亚洲乱码卡三乱码新区| 亚洲午夜成人精品无码色欲| a级片在线免费看| 香港a毛片免费观看| 国产大片51精品免费观看| 亚洲午夜成人精品电影在线观看| 亚洲性色成人av天堂| 一个人看www免费高清字幕| 亚洲精品免费网站| 国产L精品国产亚洲区久久 | 亚洲日韩国产AV无码无码精品| 精品无码一级毛片免费视频观看 | 免费观看国产精品| 亚洲高清无在码在线电影不卡| 免费观看亚洲人成网站| 精品福利一区二区三区免费视频| 亚洲欧洲国产成人综合在线观看 | 18禁美女裸体免费网站| 亚洲国产精品成人久久蜜臀 | 免费人成在线观看播放国产 | 天堂亚洲免费视频| 亚洲大尺码专区影院| 中国好声音第二季免费播放| 好男人视频社区精品免费| 亚洲人成影院在线| www成人免费观看网站| 免费鲁丝片一级观看| 亚洲av午夜福利精品一区 | 一级毛片在线免费视频| 最近中文字幕无免费视频| 亚洲欧洲成人精品香蕉网| 国产产在线精品亚洲AAVV| 啦啦啦中文在线观看电视剧免费版 | 黄色一级毛片免费| 一个人免费观看在线视频www| 亚洲成人中文字幕| 一级一片免费视频播放|