Gorrvy常用方法.docx
《Gorrvy常用方法.docx》由会员分享,可在线阅读,更多相关《Gorrvy常用方法.docx(10页珍藏版)》请在冰豆网上搜索。
Gorrvy常用方法
Groovy提供了许多常用方法~如each,eachWithIndex,any,every,grep,join,sort,find,findAll,collect,groupBy,inject,reverse,tokenize,unique,max,min,count,sum等来提升开发者的开发效率
each
遍历list
deflist=['a','b','c']
list.each{elem->
printlnelem
}
运行结果:
a
b
c
遍历map
defmap=[name:
"Joseph",address:
"Shanghai"]
map.each{key,value->
println"$key:
$value"
}
运行结果:
name:
Joseph
address:
Shanghai
each里面不支持break语句
eachWithIndex
带index的each
deflist=['a','b','c']
list.eachWithIndex{elem,i->
println"$i:
$elem"
}
运行结果:
0:
a
1:
b
2:
c
any
只要存在一个满足条件(此例中的条件为elem.length()<3)的element就返回true,否则返回false
deflist=['a','ab','abc']
list.any{elem->
elem.length()<3
}
运行结果:
true
every
所有的element都满足条件才返回true,否则返回false
deflist=['a','ab','abc']
list.every{elem->
elem.length()<3
}
运行结果:
false
grep
符合条件的element会被提取出来,形成一个list
条件以closure的形式传入
deflist=['a','ab','abc']
list.grep{elem->
elem.length()<3
}
运行结果:
["a","ab"]
条件以regex的形式传入,符合regex的element被提取出来形成一个list
deflist=['a','ab','abc']
list.grep(~/../)
运行结果:
["ab"]
条件以collection的形式传入,在collection中的element被提取出来形成一个list,可以看作求两个collection的交集
deflist=['a','ab','abc']
list.grep(['a','cde','ab'])
运行结果:
["a","ab"]
join
用指定的字符连接collection中的element
deflist=[2007,8,26]
list.join('-')
运行结果:
2007-8-26
sort
根据指定条件进行排序
deflist=[2007,8,26]
默认升序
list.sort()
倒序
list.sort{e1,e2->
returne2<=>e1
}
以对象的id排序
list.sort{e1,e2->
returne1.id<=>e2.id
}
随机打乱
list.sort{
Math.random()
}
运行结果:
[8,26,2007]
find
查找collection中满足条件的‘第一个’element
deflist=[2007,8,26]
list.find{elem->
elem<30
}
运行结果:
8
findAll
查找collection中满足条件的‘所有’element
deflist=[2007,8,26]
list.findAll{elem->
elem<30
}
运行结果:
[8,26]
collect
对collection的element进行处理,并将处理结果放到一个新的collection中
deflist=['a','b','c']
list.collect{elem->
elem*2
}
运行结果:
["aa","bb","cc"]
对map进行处理
defmap=[name:
'wang',address:
'Shanghai']
map.collect{entry->
"${entry.key}:
${entry.value}"
}
运行结果:
[name:
wang,address:
Shanghai]
groupBy
对collection中的element按给定条件进行分组
deflist=['a','b','abc','ab','c','bc']
list.groupBy{elem->
elem.length()
}
运行结果:
[1:
["a","b","c"],2:
["ab","bc"],3:
["abc"]]
inject
一个累积的过程,传入inject方法的'I'作为sum的初始值,在遍历collection的过程中,将处理结果("$sum$elem")保存到sum中
deflist=["love","you"]
list.inject('I'){sum,elem->
"$sum$elem"
}
运行结果:
Iloveyou
….
deflist2=[1,4,5,7]
printlnlist2.inject(0){
count,it->
count+it
}
运行结果:
17
上面的代码等同于下面的代码:
intcount=0
list2.each{
count+=it
}
printlncount
reverse
将collection中各element的次序颠倒一下
deflist=['a','b','c']
list.reverse()
运行结果:
["c","b","a"]
颠倒字符串
deflist='abc'
list.reverse()
运行结果:
cba
reverseEach
deflist23=['TomCheng','MikeWang','JackDeng']
我们需要求得如下要求的一个数组:
先是将list23的元素反转过来,然后再取数组中各个元素的名字,即“Tom”等组成一个新的数组。
deflist24=[]
list23.reverseEach{
defnames=it.split('')
list24<}
printlnlist24
运行结果:
["Jack","Mike","Tom"]
tokenize
指定分隔符,取得token集
'a1/b2/c3/d4'.tokenize('/')
运行结果:
["a1","b2","c3","d4"]
unique
去除collection中重复的element
deflist=['a','b','b','a','c']
list.unique()
运行结果:
["a","b","c"]
deflist10=list9.unique{
it.id
}
max
求最大值
deflist=[1,2,3]
list.max()
运行结果:
3
按指定的比较内容(此例的比较内容为长度length),在collection中选出最大的element
deflist=['a','ab','abc']
list.max{elem->
elem.length()
}
min与max类似,求最小值,用法与max相同,将上述代码中的max改为min即可
count
计数
deflist=['a','ab','a']
list.count('a')
运行结果:
2
对字符串"aaba"中的a进行计数
deflist="aaba"
list.count('a')
运行结果:
3
sum
求和
deflist=[1,2,3]
list.sum()
运行结果:
6
sum方法要提供的功能不止是简单的求和,而且还可以做更为复杂的求和。
如下:
先把集合里为偶数的元素除以2,再求和
list.sum{
it%2==0?
it/2:
it
}
运行结果:
5
求字符串的‘和’,其实就是连接字符串
deflist=['a','b','c']
list.sum()
运行结果:
abc
indexOf
deflist=[1,2,3]
list.indexOf
(2)
运行结果为:
1
list.indexOf(4)
运行结果为:
-1
同样,还有lastIndexOf
contains
deflist=[1,2,3]
printlnlist.contains
(2)
运行结果为:
true
containsAll
判断一个数组是否是另一个数组的“子集”
deflist4=['a','b','c','d']
deflist5=['a','d']
printlnlist4.containsAll(list5)
printlnlist4.containsAll(['a','e'])
运行结果为:
true
false
intersect
deflist11=['a','a','b','c','d']
deflist12=['a','b','a','e']
printlnlist11.intersect(list12)
运行结果为:
["a","b","a"]
disjoint
判断连个集合是否有交集
deflist4=['a','b','c','d']
printlnlist4.disjoint(['e','f','a'])
printlnlist4.disjoint(['e','f'])
运行结果为:
false
true