each
遍歷list
def?list?=?['a',?'b',?'c']
list.each?{?elem?->
??println?elem
}
運行結果:list.each?{?elem?->
??println?elem
}
a
b
c
b
c
遍歷map
def?map?=?[name:"山風小子",?address:"Shanghai"]
map.each?{?key,?value?->
??println?"$key?:?$value"
}
運行結果:map.each?{?key,?value?->
??println?"$key?:?$value"
}
name?:?山風小子
address?:?Shanghai
address?:?Shanghai
eachWithIndex
帶index的each
def?list?=?['a',?'b',?'c']
list.eachWithIndex?{?elem,?i?->
??println?"$i?:?$elem"
}
運行結果:list.eachWithIndex?{?elem,?i?->
??println?"$i?:?$elem"
}
0?:?a
1?:?b
2?:?c
1?:?b
2?:?c
any
只要存在一個滿足條件(此例中的條件為elem.length() < 3)的element就返回true,否則返回false
def?list?=?['a',?'ab',?'abc']
list.any?{?elem?->?
??elem.length()?<?3
}
運行結果:list.any?{?elem?->?
??elem.length()?<?3
}
true
every
所有的element都滿足條件才返回true,否則返回false
def?list?=?['a',?'ab',?'abc']
list.every?{?elem?->?
??elem.length()?<?3
}
運行結果:list.every?{?elem?->?
??elem.length()?<?3
}
false
grep
符合條件的element會被提取出來,形成一個list
條件以closure的形式傳入
def?list?=?['a',?'ab',?'abc']
list.grep?{?elem?->
??elem.length()?<?3
}
運行結果:list.grep?{?elem?->
??elem.length()?<?3
}
["a",?"ab"]
條件以regex的形式傳入,符合regex的element被提取出來形成一個list
def?list?=?['a',?'ab',?'abc']
list.grep(~/../)
運行結果:list.grep(~/../)
["ab"]
條件以collection的形式傳入,在collection中的element被提取出來形成一個list,可以看作求兩個collection的交集
def?list?=?['a',?'ab',?'abc']
list.grep(['a',?'cde',?'ab'])
運行結果:list.grep(['a',?'cde',?'ab'])
["a",?"ab"]
join
用指定的字符連接collection中的element
def?list?=?[2007,?8,?26]
list.join('-')
運行結果:list.join('-')
2007-8-26
sort
根據指定條件進行排序
def?list?=?[2007,?8,?26]
list.sort?{?e1,?e2?->
??return?e1?-?e2
}
運行結果:list.sort?{?e1,?e2?->
??return?e1?-?e2
}
[8,?26,?2007]
find
查找collection中滿足條件的‘第一個’element
def?list?=?[2007,?8,?26]
list.find?{?elem?->
??elem?<30
}
運行結果:list.find?{?elem?->
??elem?<30
}
8
findAll
查找collection中滿足條件的‘所有’element
def?list?=?[2007,?8,?26]
list.findAll?{?elem?->
??elem?<?30
}
運行結果:list.findAll?{?elem?->
??elem?<?30
}
[8,?26]
collect
對collection的element進行處理,并將處理結果放到一個新的collection中
def?list?=?['a',?'b',?'c']
list.collect?{?elem?->
??elem?*?2
}
運行結果:list.collect?{?elem?->
??elem?*?2
}
["aa",?"bb",?"cc"]
對map進行處理
def?map?=?[name:'山風小子',?address:'Shanghai']
map.collect?{?entry?->
??"${entry.key}?:?${entry.value}"
}
運行結果:map.collect?{?entry?->
??"${entry.key}?:?${entry.value}"
}
[name?:?山風小子,?address?:?Shanghai]
groupBy
對collection中的element按給定條件進行分組
def?list?=?['a',?'b',?'abc',?'ab',?'c',?'bc']
list.groupBy?{?elem?->
????elem.length()
}
運行結果:list.groupBy?{?elem?->
????elem.length()
}
[1:["a",?"b",?"c"],?2:["ab",?"bc"],?3:["abc"]]
inject
一個累積的過程,傳入inject方法的'I'作為sum的初始值,在遍歷collection的過程中,將處理結果("$sum?$elem?")保存到sum中
def?list?=?["love",?"you"]
list.inject('I')?{?sum,?elem?->?
??"$sum?$elem?"
}
運行結果:list.inject('I')?{?sum,?elem?->?
??"$sum?$elem?"
}
I?love??you?
reverse
將collection中各element的次序顛倒一下
def?list?=?['a',?'b',?'c']
list.reverse()
運行結果:list.reverse()
["c",?"b",?"a"]
顛倒字符串
def?list?=?'abc'
list.reverse()
運行結果:list.reverse()
cba
tokenize
指定分隔符,取得token集
'a1/b2/c3/d4'.tokenize('/')
運行結果:["a1",?"b2",?"c3",?"d4"]
unique
去除collection中重復的element
def?list?=?['a',?'b',?'b',?'a',?'c']
list.unique()
運行結果:list.unique()
["a",?"b",?"c"]
max
求最大值
def?list?=?[1,?2,?3]
list.max()
運行結果:list.max()
3
按指定的比較內容(此例的比較內容為長度length),在collection中選出最大的element
def?list?=?['a',?'ab',?'abc']
list.max?{?elem?->
??elem.length()
}
list.max?{?elem?->
??elem.length()
}
min與max類似,求最小值,再次就不演示用法了,用法與max相同,將上述代碼中的max改為min即可
count
計數
def?list?=?['a',?'ab',?'a']
list.count('a')
運行結果:list.count('a')
2
對字符串"aaba"中的a進行計數
def?list?=?"aaba"
list.count('a')
運行結果:list.count('a')
3
sum
求和
def?list?=?[1,?2,?3]
list.sum()
運行結果:list.sum()
6
求字符串的‘和’,其實就是連接字符串
def?list?=?['a',?'b',?'c']
list.sum()
運行結果:list.sum()
abc
最后,我想提醒各位一點:有時您可以將string看作list,對string使用適用于list的‘匕首方法’。
荊軻刺秦王

附:朝花夕拾——Groovy & Grails