android groovy语法与数据结构

android groovy语法与数据结构


帮自己记录下语法和数据,对于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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值