groovy语法基础(二,List&Map)

groovy语法基础(二,List&Map)

    • List集合
    • Map集合

List集合

集合的声明及循环遍历
println "java 声明集合"
List javaList = new ArrayList()
javaList.add(1)
javaList.add(3)
javaList.add(5)
println "groovy 声明集合"
def groovyList = [1, 3, 5]
println "groovyList type is : ${groovyList.class}"
def intArray = [1, 3, 5] as int[]
println "intArray type is : ${intArray.class}"
groovyList << 7
groovyList[4] = 9
println "groovyList[-1] value is ${groovyList[-1]}"
println "groovyList[10] value is ${groovyList[10]}"
println "groovy 遍历集合 方式1 for-in"
for (i in groovyList) {
    print i + " "
}
println "\ngroovy 遍历集合 方式2 each"
def eachList = groovyList.each {
    print it + " "
}
eachList[0] = 7
println "\ngroovyList content is : "+ groovyList
println "eachList content is : "+ eachList


println "groovy 遍历集合 方式3 collect"
def collectList = groovyList.collect {
    print it + " "
    it*2
}
collectList[0] = 2
println "\ngroovyList content is : "+ groovyList
println "collectList content is : "+ collectList

输出结果为

java 声明集合
groovy 声明集合
groovyList type is : class java.util.ArrayList
intArray type is : class [I
groovyList[-1] value is 9
groovyList[10] value is null
groovy 遍历集合 方式1 for-in
1 3 5 7 9
groovy 遍历集合 方式2 each
1 3 5 7 9
groovyList content is : [7, 3, 5, 7, 9]
eachList content is : [7, 3, 5, 7, 9]
groovy 遍历集合 方式3 collect
7 3 5 7 9
groovyList content is : [7, 3, 5, 7, 9]
collectList content is : [2, 6, 10, 14, 18]
  • groovy中声明集合可以使用groovy中的语法糖“[]”,默认类型为ArrayList,这个类似java中是数组声明写法,groovy中如声明数组或其它类型,可以选择显示声明或者在变量赋值后用“as”修饰符指定类型;
  • groovy集合添加元素除了java中的add方法外还可以使用“<<”符号,在集合末尾添加一个元素,类似java中集合的add方法,也可用index索引在指定位置添加或修改元素值,此外也可以使用重载运算符"+"/"-"来增加或删除元素,重载运算符操作返回的是个新集合,原集合不发生变化;
  • groovy集合中取值可以使用index索引取值,类似java中的数组取值,不同的是index可以是负数,如-1代表集合倒数第一个元素,而且取值时当index大于集合size时并不会报指针越界异常,只是取出的值是null
  • 集合遍历可以使用for-in方式,同之前在“循环”中讲的一样 in 后跟的是一个Range类型,这里的集合也是一个范围;
  • 集合遍历也可使用each函数,不同与for-in,each调用后会将集合对象本身返回,而另一个集合遍历的方法collect则会返回一个新的集合,该集合中的元素分别为collect闭包中最后一行代码的返回值;
  • 除上面常用的几种方式集合遍历的方法还有.reverseEach即从后往前遍历,.eachWithIndex闭包中返回两个值index和value;

集合中常用方法

def list = ["a","b","c","a"]
def findValue = list.find {
    it == "b"
}
println "findValue is : ${findValue}"
def findAllValue = list.findAll {
    it == "a"
}
println "findAllValue is : ${findAllValue}"

def expansionList = list*.toUpperCase()
println "expansionList is : ${expansionList}"
println "list is : ${list}"

def anyCheckResult = list.any {
    it == 'a'
}
println "anyCheckResult is : ${anyCheckResult}"
def everyCheckResult = list.every {
    it == 'a'
}
println "everyCheckResult is : ${everyCheckResult}"
输出结果为
findValue is : b
findAllValue is : [a, a]
expansionList is : [A, B, C, A]
list is : [a, b, c, a]
anyCheckResult is : true
everyCheckResult is : false
  • find方法为查找满足闭包条件的元素并返回,只会返回集合中第一个满足条件的元素,如没有则返回null;
  • findAll方法查找满足闭包条件的所有元素并返回,此处返回的是一个满足条件的所有元素组成的集合;
  • list*.为集合的展开操作符,意为对集合中的所有元素进行处理,并返回一个处理后的新集合,原集合值不变;
  • any方法为检查集合中是否有符合闭包条件的元素,如有返回true,否则返回false;
  • every方法为检查集合中元素是否全部符合闭包中的条件,如全符合返回true,否则返回false;
  • 注意:groovy中的 “==”操作符其实是判断值是否相等,是调用了equals方法,而在java中是判断是否是同一个对象,在groovy中判断是否为同一个对象使用.is()方法。

Map集合

集合声明及常用方法

def groovyMap = [B: "Benz", "L": "Lexus", A: "Audi"]
println "groovyMap type is : " + groovyMap.getClass()
println "groovyMap.B value is : ${groovyMap.B}"
println "groovyMap.'B' value is : ${groovyMap.'B'}"
println "groovyMap['B'] value is : ${groovyMap['B']}"
groovyMap.F = 'Ferrari'
groovyMap << [P:"Porsche"]
groovyMap.each {
    print "${it} "
}
println "\nkey-value接收遍历"
groovyMap.each {
    key , value ->
        print "key = ${key} , value = ${value}"
}
println "\n展开操作符获取key集合"
def getKey = groovyMap*.getKey()
println "getKey is : ${getKey}"
    输出结果
groovyMap type is : class java.util.LinkedHashMap
groovyMap.B value is : Benz
groovyMap.'B' value is : Benz
groovyMap['B'] value is : Benz
B=Benz L=Lexus A=Audi F=Ferrari P=Porsche
key-value接收遍历
key = B , value = Benzkey = L , value = Lexuskey = A , value = Audikey = F , value = Ferrarikey = P , value = Porsche
展开操作符获取key集合
getKey is : [B, L, A, F, P]
  • map声明同list集合类似,元素中的key可以用引号也可不用,map声明默认类型为LinkedHashMap,可通过as指定类型;
  • map取值可以直接通过map.key、map[‘key’]、map.'key’方式均可,map也可通过map.key = value来进行添加/修改元素,同样也可像list一样通过“<<”添加元素;
  • map遍历的各种方法使用同list一样,不同之处是闭包中接收参数是key=value的形式,可以通过声明两个参数分别接收key和value;
  • 可以通过展开操作符map*.getKey()获取key集合的list;
  • 注意:因为map可以通过map.key来获取元素,所以map不可直接通过map.class来获取类型,因此在使用def声明的变量在获取变量类型的时候最好直接使用.getClass()更保险些。

你可能感兴趣的:(笔记)