美文网首页
第六章.使用集合类

第六章.使用集合类

作者: one_mighty | 来源:发表于2017-05-16 14:04 被阅读0次

    Groovy不仅将Java中的String进行扩展,还对集合(list和map)进行了扩展或者说是简化。

    一、使用List

    1、在groovy中使用list只需要使用中括号([ ])创建,不用new 操作符;

    2、如果需要获取list中的某个元素,可以用list[index]获取;

    3、使用负数来表示从右向左获取元素,如l[-1]表示获取最右边第一个元素;

    4、可以使用Range来打印list中几个连续的元素,如list[2..5],负的Range,反向打印;

    5、使用list[2..5]获得的变量sublist修改元素后,原来list值并没有受到影响(与原文不同);

    6、向list中添加元素用<<操作符;

    例子:

    def l= [1,2,3,4,5,6,7]

    println l

    println l.getClass().name

    println l[1]

    println l[l.size()-1]

    println l[-1]

    println l[2..5]

    println l[-2..-5]

    def sublist=l[2..5]

    println sublist.dump()

    sublist[0] ='three'

    println sublist

    println l

    l<<8

    println l

    结果:

    [1, 2, 3, 4, 5, 6, 7]

    java.util.ArrayList

    2

    7

    7

    [3, 4, 5, 6]

    [6, 5, 4, 3]

    [three, 4, 5, 6]

    [1, 2, 3, 4, 5, 6, 7]

    [1, 2, 3, 4, 5, 6, 7, 8]

    二、迭代ArrayList

    1、使用each()可以对list进行迭代,它专注与在每个元素上进行操作;

    2、使用collect()也可以对list进行迭代,但是它会将闭包的返回值收集起来,形成新的ArrayList;

    例子:

    def l= [1,2,3,4,5,6,7,8,9]

    //正向迭代打印

    l.each{print"$it"}

    println()

    //反向迭代打印

    l.reverseEach{print"$it"}

    println()

    //求和

    def total=0

    l.each{total+=it}

    println"Total is$total"

    //求乘积

    def doubleList= []

    l.each{doubleList<

    println l

    println doubleList

    //求乘积

    def collect=l.collect{it*2}

    println collect

    结果:

    1 2 3 4 5 6 7 8 9

    9 8 7 6 5 4 3 2 1

    Total is 45

    [1, 2, 3, 4, 5, 6, 7, 8, 9]

    [2, 4, 6, 8, 10, 12, 14, 16, 18]

    [2, 4, 6, 8, 10, 12, 14, 16, 18]

    三、使用查找方法

    1、使用find()查找第一个符合条件的元素;

    2、使用findAll()查找所有符合条件的元素;

    例子:

    def l= [1,2,3,4,5,6,7,8,9]

    def found=l.find{it>2}

    println found

    def findAll=l.findAll{it>2}

    println findAll

    结果:

    3

    [3, 4, 5, 6, 7, 8, 9]

    四、List上的其他便捷方法

    代码调用:

    //求和

    def sum=l.sum()

    println sum

    //反向排序

    l.sort(newComparator() {

    intcompare(Integero1,Integero2) {

    return-1

    }

    })

    println l

    //连接元素

    def join=l.join("-")

    println join

    //向集合中添加集合

    l<<[10,20,30]

    println l

    //平铺,也即是将集合内的元素是集合的话,将其元素改为父集合的元素

    def flatten=l.flatten()

    println flatten

    结果:

    45

    [9, 8, 7, 6, 5, 4, 3, 2, 1]

    9-8-7-6-5-4-3-2-1

    [9, 8, 7, 6, 5, 4, 3, 2, 1, [10, 20, 30]]

    [9, 8, 7, 6, 5, 4, 3, 2, 1, 10, 20, 30]

    五、使用Map

    1、用[key:value]创建map,元素间用逗号,隔开;

    2、可以使用map[key]这种方法来获取map的值,也可以使用map.key来获取(键中包含特殊字符时用map.'key');

    3、使用一个未知键来求值时,返回null.例子:

    代码调用:

    def m= ['language':'groovy','base':'java']

    println m['language']

    println m.base

    println m.type

    m.put('type','dynamic')

    println m.type

    结果:

    groovy

    java

    null

    dynamic

    六、在Map上迭代

    1、用each()方法进行迭代,进行某些特定操作;

    2、用collect()方法进行迭代,返回一组有用数据集合。例子:

    代码调用:

    def m= ['language':'groovy','base':'java']

    m.each{entry->println"entry[$entry.key:$entry.value]"}

    m.each{key,value->println"entry[$key:$value]"}

    def collect=m.collect{it}

    println collect

    结果:

    entry[language : groovy]

    entry[base : java]

    entry[language : groovy]

    entry[base : java]

    [language=groovy, base=java]

    3、用find()方法查找第一个符合条件的元素;

    4、用findAll()方法查找map中符合条件的第一个元素。例子:

    代码调用:

    def m= ['language':'groovy',"base":'java','number':10]

    m.each{entry->println"entry[$entry.key:$entry.value]"}

    m.each{key,value->println"entry[$key:$value]"}

    def collect=m.collect{it}

    println"collect is$collect"

    def find=m.find{entry->entry.key=='language'}

    println"find is$find"

    def findAll=m.findAll{entry -> entry.value.getClass().name==String.class.name}

    println"findAll is$findAll"

    结果:

    entry[language : groovy]

    entry[base : java]

    entry[number : 10]

    entry[language : groovy]

    entry[base : java]

    entry[number : 10]

    collect is [language=groovy, base=java, number=10]

    find is language=groovy

    findAll is [language:groovy, base:java]

    七、Map上的其他便捷方法

    1、使用any()表示map的元素是否至少有一个满足某种条件;

    2、使用every()表示map的每个元素都满足某种条件;

    3、使用groupBy()对map进行分组。例子:

    def students= ['xiao qiang':23,'xiao li':25,'da wang':25]

    println students.any{key,value->key=~"[A-Za-z]"}

    println students.every{key,value->key=~"[A-Za-z]"}

    def groupedStudents=students.groupBy{entry -> entry.key.split(" ")[0] }

    groupedStudents.each{entry->

    println"$entry.key:"

    entry.value.collect{name,age->

    println "name is$name,age is$age"

    }

    }

    结果:

    true

    true

    xiao :

    name is xiao qiang ,age is 23

    name is xiao li ,age is 25

    da :

    name is da wang ,age is 25

    《完》

    相关文章

      网友评论

          本文标题:第六章.使用集合类

          本文链接:https://www.haomeiwen.com/subject/itxlxxtx.html