1. 程式人生 > >Groovy三大集合型別

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**