帮自己记录下语法和数据,对于android开发者而应,groovy写的机会还是比较少的,忘记了就来瞅瞅。groovy的语法与数据结构比较像python,函数比较多,比较灵活。
java的语法跟groovy通用
语法
switch
用法跟java一样,但是类型无限定:字符串、整型、数组、范围(1..5
这样的结构指范围)、类型等。
def x = 1.23
def result
//无限制,可匹配list 某个元素 范围
switch (x){
case 'foo':
break
case 123:
break
case [1.23,3,4,5,'fpp']:
result = 'inlist'
break
case 12..34:
break
case Integer:
break
case BigDecimal:
result = "BigDecimal"
break
case 1.23:
result = 'x'
break
default:
result = 'nothing'
break
}
for
范围遍历:
def sum = 0
for (i in 0..9){
sum+=i
}
list遍历:
def sum = 0
for(i in [1,2,3,4,5,6,7,8,9]){
sum +=i
}
map遍历:
def sum = 0
for (i in ['lili':1,'xiaoming':2]){
sum+=i.value
}
当然,java的遍历可以用:
def sum = 0
for(int i=0;i<10;i++){
sum=sum+i
}
with
with应该属于闭包结构了,不属于语法,但还是介绍下:
Person person = new Person();
person.with {
name = "xiaoming"
}
可以用with来初始化属性,进行赋值。
数据结构
list
list的结构在java里面对应的是ArrayList类型的。
定义如下:
//这种定义,不限制类型,取值需要注意
def list =[1,2,3,"4"]
//规定集合中数据类型 array = [1,2,3,'aa'] as int[] 这样就会运行报NumberFormatException错,要注意
def array = [1,2,3] as int[]
//打印集合大小
println array.size()
//验证下类型 打印 java.util.ArrayList
println array.class.name
取值、存值操作,要注意:
def list =[1,2,3,"4",'test']
//取值
//访问第一个元素
println list[0]
//访问最后一个元素 -1代表右侧第一个,-2代表右侧第二个,
println list[-1]
//访问下标 1 到 下标 3的元素,就是第二个到第四个元素,返回一个lsit
println list[1..3]
//存值
list.add('5')
//添加到最后
list.leftShift(19)
//下标 添加
list.add(0,"first")
//特殊操作
//排序
//例子:绝对值排序 Comparator是个比较器,跟java一样
def sortlist = [-1,2,-4,5,7,-9]
Comparator mc ={ a, b-> a==b?0:Math.abs(a) < Math.abs(b)?-1:1}
Collections.sort(sortlist,mc)
println(sortlist)
//例子:长度比较
def stringList = ['a','asdas','33','32324242','22']
stringList.sort{it -> return it.size()}
println(stringList)
//查找
def findList = [-3,6,2,7,-5]
//例子 找出第一个是偶数 的元素
println findList.find{return it % 2 == 0}
//找出 所有偶数 的集合
println findList.findAll{return it % 2 == 0}
// 只要有一个元素满足条件 就返回 true
println findList.any(){return it % 2 == 0}
// 所有元素满足条件 就返回 true
println findList.every(){return it % 2 == 0}
// 返回集合中 ascii码最小的
println findList.min()
// 返回集合中 闭包处理后 最大的 元素
println findList.max{it -> return Math.abs(it)}
//统计
//返回 所以偶数元素集合的size
println findList.count{return it%2==0}
//丢弃
//dropRight 丢弃最右边 2个元素,并返回一个新的集合
def newlist = findList.dropRight(2)
map
groovy的map结构很直接的,很暴力。对于java里面的结构为LinkedHashMap。定义如下:
def colors = [red:'fff',green:'test',gray: 1]
上面就定义三个健值对,冒号前的是Key值,后面是Value值。Value值类型无约束的,但是取出来用的时候类型要对,要不然就报错了,动态语言就是这样的。
一些操作如下:
def colors = [red:'fff',green:'test',gray: 1]
//取值操作
println colors['red']
println colors.red
println colors.get('red')
//放值操
colors.yeelow = 'hujin'
colors.leftShift(blue:'king')
colors.complex =[a:'1',b:'2']
//遍历
colors.each {
def keyAndValue ->
println(keyAndValue.key + " " + keyAndValue.value)
}
//验证下map 打印结果:java.util.LinkedHashMap
println colors.getClass().name
范围
特有的结构,表示一个范围,一般用于整型集合。定义如下:
def range = 1..10
操作:
def range = 1..10
//IntRange
println(range.class)
println(range[0])
//是否包含
println(range.contains(10))
//开始值
println range.from
//结束值
println range.to