Groovy三大集合类型

Range

  • 在java中并没有range的概念,可range对循环的简化处理是不可小看的,如python中的range()函数
  • “..”作为范围限定符的用法已经了解,如for (i in 1..10) 即i从1到10的循环
  • 必须认识到任何类其实都可以实现range,即重载”..”限定符,满足下两条件即可:
    1. 该类型实现next和previous方法,也就是说,重写++和–操作符;
    2. 该类型实现java.lang.Comparable接口;也就是说实现compareTo方法, 实际上是重写<=>操作符。

重载”..”实例:

class WeekDay implements Comparable{
    static final DAYS = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
    private int index = 0;
    WeekDay(String day){
        index = DAYS.indexOf(day)
    }   
    WeekDay next(){
        return new WeekDay(DAYS[(index+1)%DAYS.size()])
    }
    WeekDay previous(){
        return new WeekDay(DAYS[index-1])
    }
    int compareTo(Object other){
        return this.index <=> other.index
    }
    String toString(){
        return DAYS[index]
    }
}
def mon = new WeekDay('Mon')
def fri = new WeekDay('Fri')
for (i in mon..fri)
print i  //prints MonTueWedThuFri

List

  • list符号为[],默认为java中的ArrayList
  • GDK扩展了所有的数组、容器对象和字符串,为它们增加了一个toList方法,这个方法返回一个由数组(容器或者字符串)元素构成新的list对象,字符串对象被处理为一个character列表。
  • GDK扩展功能使list操作更容易,极其像python中列表处理

一些重要的方法:

def list = [1,'m',2,3]
//访问list
println list[0..2]  //prints [1,'m',2]
println list[-1] //prints 3

//增删list
list +=['a','b']  //list变成 [1,'m',2,3,'a','b']
list -=['a','b']  //list变回 [1,'m',2,3]
list << 'a'
list.remove(1)  

//循环中
for (i in list)

//方法
list.removeAll()
list.sort()
list.pop() //把最后一个元素pop出去
list.join('-') //'-'连接元素,返回字符串

//结合闭包
list.findAll{} //找到所有满足条件的 返回list
list.find{} //找到第一个满足条件的 元素返回
list.any{} //任何满足 返回true
list.every{} //every每个都满足 返回true
list.collect{} //对每个元素进行操作

Map

  • [key:value,key:value]为map的书写形式
  • map的缺省类型为java中的HashMap
  • 利用entry 的key,value属性访问
def map = ['a':1,'b':2]
//访问map
map.a //即返回1
map['a'] 

//方法
map.containsKey()
map.containsValue
map.keySet() //返回keySet
map.values()  //返回valueSet

**其他一些方法类比list,如collect,any,every,each,find,findAll**
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值