Groovy不仅将Java中的String进行扩展,还对集合(list和map)进行了扩展或者说是简化。
一、使用List
1、在groovy中使用list只需要使用中括号([ ])创建,不用new 操作符;
2、如果需要获取list中的某个元素,可以用list[index]获取;
3、使用负数来表示从右向左获取元素,如l[-1]表示获取最右边第一个元素;
4、可以使用Range来打印list中几个连续的元素,如list[2..5],负的Range,反向打印;
5、使用list[2..5]获得的变量sublist修改元素后,原来list值并没有受到影响(与原文不同);
6、向list中添加元素用<<操作符;
例子:
def l= [1,2,3,4,5,6,7]
println l
println l.getClass().name
println l[1]
println l[l.size()-1]
println l[-1]
println l[2..5]
println l[-2..-5]
def sublist=l[2..5]
println sublist.dump()
sublist[0] ='three'
println sublist
println l
l<<8
println l
结果:
[1, 2, 3, 4, 5, 6, 7]
java.util.ArrayList
2
7
7
[3, 4, 5, 6]
[6, 5, 4, 3]
[three, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7, 8]
二、迭代ArrayList
1、使用each()可以对list进行迭代,它专注与在每个元素上进行操作;
2、使用collect()也可以对list进行迭代,但是它会将闭包的返回值收集起来,形成新的ArrayList;
例子:
def l= [1,2,3,4,5,6,7,8,9]
//正向迭代打印
l.each{print"$it"}
println()
//反向迭代打印
l.reverseEach{print"$it"}
println()
//求和
def total=0
l.each{total+=it}
println"Total is$total"
//求乘积
def doubleList= []
l.each{doubleList<
println l
println doubleList
//求乘积
def collect=l.collect{it*2}
println collect
结果:
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1
Total is 45
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 4, 6, 8, 10, 12, 14, 16, 18]
[2, 4, 6, 8, 10, 12, 14, 16, 18]
三、使用查找方法
1、使用find()查找第一个符合条件的元素;
2、使用findAll()查找所有符合条件的元素;
例子:
def l= [1,2,3,4,5,6,7,8,9]
def found=l.find{it>2}
println found
def findAll=l.findAll{it>2}
println findAll
结果:
3
[3, 4, 5, 6, 7, 8, 9]
四、List上的其他便捷方法
代码调用:
//求和
def sum=l.sum()
println sum
//反向排序
l.sort(newComparator() {
intcompare(Integero1,Integero2) {
return-1
}
})
println l
//连接元素
def join=l.join("-")
println join
//向集合中添加集合
l<<[10,20,30]
println l
//平铺,也即是将集合内的元素是集合的话,将其元素改为父集合的元素
def flatten=l.flatten()
println flatten
结果:
45
[9, 8, 7, 6, 5, 4, 3, 2, 1]
9-8-7-6-5-4-3-2-1
[9, 8, 7, 6, 5, 4, 3, 2, 1, [10, 20, 30]]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 20, 30]
五、使用Map
1、用[key:value]创建map,元素间用逗号,隔开;
2、可以使用map[key]这种方法来获取map的值,也可以使用map.key来获取(键中包含特殊字符时用map.'key');
3、使用一个未知键来求值时,返回null.例子:
代码调用:
def m= ['language':'groovy','base':'java']
println m['language']
println m.base
println m.type
m.put('type','dynamic')
println m.type
结果:
groovy
java
null
dynamic
六、在Map上迭代
1、用each()方法进行迭代,进行某些特定操作;
2、用collect()方法进行迭代,返回一组有用数据集合。例子:
代码调用:
def m= ['language':'groovy','base':'java']
m.each{entry->println"entry[$entry.key:$entry.value]"}
m.each{key,value->println"entry[$key:$value]"}
def collect=m.collect{it}
println collect
结果:
entry[language : groovy]
entry[base : java]
entry[language : groovy]
entry[base : java]
[language=groovy, base=java]
3、用find()方法查找第一个符合条件的元素;
4、用findAll()方法查找map中符合条件的第一个元素。例子:
代码调用:
def m= ['language':'groovy',"base":'java','number':10]
m.each{entry->println"entry[$entry.key:$entry.value]"}
m.each{key,value->println"entry[$key:$value]"}
def collect=m.collect{it}
println"collect is$collect"
def find=m.find{entry->entry.key=='language'}
println"find is$find"
def findAll=m.findAll{entry -> entry.value.getClass().name==String.class.name}
println"findAll is$findAll"
结果:
entry[language : groovy]
entry[base : java]
entry[number : 10]
entry[language : groovy]
entry[base : java]
entry[number : 10]
collect is [language=groovy, base=java, number=10]
find is language=groovy
findAll is [language:groovy, base:java]
七、Map上的其他便捷方法
1、使用any()表示map的元素是否至少有一个满足某种条件;
2、使用every()表示map的每个元素都满足某种条件;
3、使用groupBy()对map进行分组。例子:
def students= ['xiao qiang':23,'xiao li':25,'da wang':25]
println students.any{key,value->key=~"[A-Za-z]"}
println students.every{key,value->key=~"[A-Za-z]"}
def groupedStudents=students.groupBy{entry -> entry.key.split(" ")[0] }
groupedStudents.each{entry->
println"$entry.key:"
entry.value.collect{name,age->
println "name is$name,age is$age"
}
}
结果:
true
true
xiao :
name is xiao qiang ,age is 23
name is xiao li ,age is 25
da :
name is da wang ,age is 25
《完》
网友评论