Groovy入门(三)——集合类型List

来源:互联网 发布:数据交易是指什么 编辑:程序博客网 时间:2024/06/06 10:05

List


groovy中的List结合了Java中数组和List的优势,既可以用下标的形式来访问数组中的元素,而且可以动态扩展数组,相当方便!

声明List

List有以下三种声明方式

  1. myList =[1,2,3]
  2. myList = new ArrayList() 或者 mylinkList = new Linklist(myList);
  3. longList = (0..100).toList()

List可以像普通数组那样通过下标来访问:

myList = ['a','b','c','d','e','f']assert myList[0] == 'a'assert myList[1..3]==['b','c','d']assert myList[1,3,5]==['b','d','f'] //remove element d to e myList[3..5] =[]   //反向遍历assert myList[4..0] =['e','d','c','b','a']//负数代表从后往前遍历  -1表示最后一个元素assert myList[-1]=['f'] 

其他运算符:

myList = []//append a element   plus(Object)myList+='a' assert myList == ['a']myList+=['b','c']//plus(Collection)assert myList == ['a','b','c'] myList = []//leftShit is like appendmyList << 'a'<<'b' //minu(Collection)assert myList -['b'] == ['a']//multiplyassert myList*2  == ['a','b','a','b'] 

控制结构

groovy中的控制结构和Java也非常相似, for循环的结构则跟Python相似

myList =['a','b','c']assert myList.isCase('a') candidate ='a'switch(candidate){    case myList:                assert true;                break    default:                assert false}//intersection filter 取交集assert ['x','a','z'].grep(myList) ==['a']myList = []//null List is considered false in if statementif(myList)    assert false  //for 循环迭代Liststr =''for(i in [1,'x',5]){    str += i}  assert str == '1x5'

List主要方法

assert [1,[2,3]].flatten() == [1,2,3]assert [1,2,3].intersect([4,3,1])==[3,1]assert [1,2,3].disjoint([4,5,6]) //当做stack来使用list = [1,2,3]popped = list.pop() assert popped == 3assert list == [1,2]list.push(3) //等价于"<<"操作符assert list ==[1,2,3]assert [1,2].reverse() ==[2,1]assert [3,1,2].sort() == [1,2,3]def list =[[1,0],[0,1,2]]// compare by first elementlist = list.sort{a,b->//<==> 等价于compare方法a[0]<=>b[0]}assert list == [[0,1,2],[1,0]]//compare by sizelist = list.sort{item-> item.size()}assert list ==[[1,0],[0,1,2]]list = ['a','b','c']// remove by indexlist.remove(2)assert list ==['a','b']// remove by valuelist.remove(b)assert list == ['a']list = ['a','b','b','c']list.removeAll(['b','c'])assert list ==['a']//tranform list to anotherdef doubled = [1,2,3].collect{item->item*2}assert doubled == [2,4,6]find every element matching the closuredef odd = [1,2,3].findAll{item->item%2==1}assert odd ==[1,3]//Remove duplicate elementsdef x = [1,1,1]assert [1] == new HashSet(x).toList()assert [1] == x.unique() //Remove null elementsdef x = [1,null,1]assert [1,1] == x.findAll{it!=null}assert [1,1] == x.grep{it}def list = [1,2,3]assert list.count(2) ==1assert list.max() == 3assert list.min() == 1def even = list.find{item->item%2==0}assert even ==2assert list.every{item->item<5}assert list.any{item->item<2}def store =''list.reverseEach{item->store+=item}assert store == '321'assert list.join('-') == '1-2-3'result = list.inject(0){clinks,guests->clinks+=guests}assert result == 0+1+2+3assert list.sun() == 6

List实战——快速排序

def quickSort(list){    if(list.size() <2)        return list     def pivot = list[list.size().intdiv(2)]     def left = list.findAll{item->item<pivot}     def middle =  list.findAll {item->item==pivot}     def right = list.findAll{item->item>pivot}     return (quickSort(left)+middle+quickSort(right))}assert quickSort([]) == []assert quickSort([1]) == [1]assert quickSort([1,2]) == [1,2]assert quickSort([2,1,3]) == [1,2,3]assert quickSort([1.0f,'a',10,null]) == [null,1.0f,10,'a']assert quickSort('Karin and Dierk') == '  DKaadeiiknnrr'.toList()
0 0