First they ignore you
          then they ridicule you
          then they fight you
          then you win
              -- Mahatma Gandhi
          Chinese => English     英文 => 中文             
          隨筆-221  評論-1047  文章-0  trackbacks-0
          Groovy提供了許多‘匕首方法’(匕首,短小精悍也~如each,eachWithIndex,any,every,grep,join,sort,find,findAll,collect,groupBy,inject,reverse,tokenize, unique,max,min,count,sum等)來提升開發(fā)者的開發(fā)效率,但常被Java開發(fā)人員忽視。在這篇隨筆中我將為您演示各方法的使用。

          each
          遍歷list
          def?list?=?['a',?'b',?'c']
          list.each?{?elem?
          ->
          ??println?elem
          }
          運(yùn)行結(jié)果:
          a
          b
          c

          遍歷map
          def?map?=?[name:"山風(fēng)小子",?address:"Shanghai"]
          map.each?{?key,?value?
          ->
          ??println?
          "$key?:?$value"
          }
          運(yùn)行結(jié)果:
          name?:?山風(fēng)小子
          address?:?Shanghai

          eachWithIndex
          帶index的each
          def?list?=?['a',?'b',?'c']
          list.eachWithIndex?{?elem,?i?
          ->
          ??println?
          "$i?:?$elem"
          }
          運(yùn)行結(jié)果:
          0?:?a
          1?:?b
          2?:?c

          any
          只要存在一個滿足條件(此例中的條件為elem.length() < 3)的element就返回true,否則返回false
          def?list?=?['a',?'ab',?'abc']
          list.any?{?elem?
          ->?
          ??elem.length()?
          <?3
          }
          運(yùn)行結(jié)果:
          true

          every
          所有的element都滿足條件才返回true,否則返回false
          def?list?=?['a',?'ab',?'abc']
          list.every?{?elem?
          ->?
          ??elem.length()?
          <?3
          }
          運(yùn)行結(jié)果:
          false

          grep
          符合條件的element會被提取出來,形成一個list
          條件以closure的形式傳入
          def?list?=?['a',?'ab',?'abc']
          list.grep?{?elem?
          ->
          ??elem.length()?
          <?3
          }
          運(yùn)行結(jié)果:
          ["a",?"ab"]

          條件以regex的形式傳入,符合regex的element被提取出來形成一個list
          def?list?=?['a',?'ab',?'abc']
          list.grep(
          ~/../)
          運(yùn)行結(jié)果:
          ["ab"]

          條件以collection的形式傳入,在collection中的element被提取出來形成一個list,可以看作求兩個collection的交集
          def?list?=?['a',?'ab',?'abc']
          list.grep([
          'a',?'cde',?'ab'])
          運(yùn)行結(jié)果:
          ["a",?"ab"]

          join
          用指定的字符連接collection中的element
          def?list?=?[2007,?8,?26]
          list.join(
          '-')
          運(yùn)行結(jié)果:
          2007-8-26

          sort
          根據(jù)指定條件進(jìn)行排序
          def?list?=?[2007,?8,?26]
          list.sort?{?e1,?e2?
          ->
          ??
          return?e1?-?e2
          }
          運(yùn)行結(jié)果:
          [8,?26,?2007]

          find
          查找collection中滿足條件的‘第一個’element
          def?list?=?[2007,?8,?26]
          list.find?{?elem?
          ->
          ??elem?
          <30
          }
          運(yùn)行結(jié)果:
          8

          findAll
          查找collection中滿足條件的‘所有’element
          def?list?=?[2007,?8,?26]
          list.findAll?{?elem?
          ->
          ??elem?
          <?30
          }
          運(yùn)行結(jié)果:
          [8,?26]

          collect
          對collection的element進(jìn)行處理,并將處理結(jié)果放到一個新的collection中
          def?list?=?['a',?'b',?'c']
          list.collect?{?elem?
          ->
          ??elem?
          *?2
          }
          運(yùn)行結(jié)果:
          ["aa",?"bb",?"cc"]

          對map進(jìn)行處理
          def?map?=?[name:'山風(fēng)小子',?address:'Shanghai']
          map.collect?{?entry?
          ->
          ??
          "${entry.key}?:?${entry.value}"
          }
          運(yùn)行結(jié)果:
          [name?:?山風(fēng)小子,?address?:?Shanghai]


          groupBy
          對collection中的element按給定條件進(jìn)行分組
          def?list?=?['a',?'b',?'abc',?'ab',?'c',?'bc']
          list.groupBy?{?elem?
          ->
          ????elem.length()
          }
          運(yùn)行結(jié)果:
          [1:["a",?"b",?"c"],?2:["ab",?"bc"],?3:["abc"]]


          inject
          一個累積的過程,傳入inject方法的'I'作為sum的初始值,在遍歷collection的過程中,將處理結(jié)果("$sum?$elem?")保存到sum中
          def?list?=?["love",?"you"]
          list.inject(
          'I')?{?sum,?elem?->?
          ??
          "$sum?$elem?"
          }
          運(yùn)行結(jié)果:
          I?love??you?

          reverse
          將collection中各element的次序顛倒一下
          def?list?=?['a',?'b',?'c']
          list.reverse()
          運(yùn)行結(jié)果:
          ["c",?"b",?"a"]

          顛倒字符串
          def?list?=?'abc'
          list.reverse()
          運(yùn)行結(jié)果:
          cba

          tokenize
          指定分隔符,取得token集
          'a1/b2/c3/d4'.tokenize('/')
          運(yùn)行結(jié)果:
          ["a1",?"b2",?"c3",?"d4"]

          unique
          去除collection中重復(fù)的element
          def?list?=?['a',?'b',?'b',?'a',?'c']
          list.unique()
          運(yùn)行結(jié)果:
          ["a",?"b",?"c"]


          max
          求最大值
          def?list?=?[1,?2,?3]
          list.max()
          運(yùn)行結(jié)果:
          3

          按指定的比較內(nèi)容(此例的比較內(nèi)容為長度length),在collection中選出最大的element
          def?list?=?['a',?'ab',?'abc']
          list.max?{?elem?
          ->
          ??elem.length()
          }

          min與max類似,求最小值,再次就不演示用法了,用法與max相同,將上述代碼中的max改為min即可

          count
          計數(shù)
          def?list?=?['a',?'ab',?'a']
          list.count(
          'a')
          運(yùn)行結(jié)果:
          2

          對字符串"aaba"中的a進(jìn)行計數(shù)
          def?list?=?"aaba"
          list.count(
          'a')
          運(yùn)行結(jié)果:
          3

          sum
          求和
          def?list?=?[1,?2,?3]
          list.sum()
          運(yùn)行結(jié)果:
          6

          求字符串的‘和’,其實就是連接字符串
          def?list?=?['a',?'b',?'c']
          list.sum()
          運(yùn)行結(jié)果:
          abc

          最后,我想提醒各位一點:有時您可以將string看作list,對string使用適用于list的‘匕首方法’。

          荊軻刺秦王


          附:朝花夕拾——Groovy & Grails


          posted on 2007-08-26 13:28 山風(fēng)小子 閱讀(14316) 評論(7)  編輯  收藏 所屬分類: Groovy & Grails
          主站蜘蛛池模板: 洛隆县| 隆化县| 深圳市| 枣庄市| 高青县| 红桥区| 甘肃省| 喜德县| 克什克腾旗| 南安市| 汝阳县| 太康县| 枞阳县| 虞城县| 临桂县| 福鼎市| 阿拉善右旗| 鞍山市| 夏津县| 邮箱| 白朗县| 济宁市| 龙陵县| 桦南县| 奉化市| 历史| 东明县| 搜索| 巫山县| 密云县| 巩义市| 扎赉特旗| 大同县| 横峰县| 华池县| 辛集市| 即墨市| 迁西县| 嘉定区| 文水县| 察雅县|