Groovy的集合类型

    技术2026-08-03  5

    ranges(范围),lists(列表),maps(映射)

     

    -------------ranges-------------

    left..right

    (left..right)

    (left..<right)

     

    ranges的方法有contains(xx),each{闭包}等 ,除此之外还有lists.grep(ranges)

     

    ---------lists与ranges结合产生强大的灵活性----------------

     

    myList=['a','b','c','d','e','f']

    assert myList[0..2]==['a','b','c']

    assert myList[0,2]==['a','c']

     

    //replace

    myList[0..2]=['x','y','z']

    assert myList==['x','y','z','d','e','f']

     

    //remove

    myList[0..2]=[]

    assert myList==['d','e','f']

    //insert or replace

    myList[2..2]=['f','x']

    assert myList==['d','e','f','x']

     

    对于list除了可以正数索引访问,也可以通过负数索引访问

    如lists[-1]指的就是数组的最后一个元素

     

    list的findAll方法有一个 闭包的参数,返回的是一个数组。当闭包内结果为true时

    如a=['a','b',1]

    a.findAll{print it}

    结果为:ab1

     

    二分法排序在groovy中的经典案例,同时用到了 递归

     

    def quickSort(list){

        if(list.size<=1) return list

        def pivot =list[list.size.intdiv(2)]

        def left=list.findAll{it<pivot}

        def middle=list.findAll{it==pivot}

        def right=list.findAll{it>pivot}

        return quickSort(left)+middle+quickSort(right)

    }

     

    ------------------map-----------------------

    一般情况下map的key都是string类型,在此我们可以省略单引号。

    assert ['a':1]==[a:1] 

     

     

    m=[a:1]

    assert m.a==1

    assert m.get('a')==1

    assert m['a']==1

    assert m.b==null

     

    如果key包含像点.这样的特殊字符,需要引号包围

     

    m=['a.b':1]

    assert m.'a.b'==1

     

     

    m.keys

    m.keySet

    m.entrySet

     

    assert m.any{it.key==xx}

    assert m.every{it.value==xx}

    any和every返回boolean,any表示只要有符合条件的就返回true,every表示每一个都符合才返回true

     

    map的遍历可以通过each来处理,m.each{entry->entry.key;entry.value}或者m.each{key,value->xxxx}

     

    m.subMap(['key1','key2'])

     

    GString还有tokenize方法,意义为将一段string按照默认分隔符,分割为一个个word

    最新回复(0)