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

第六章.使用集合类

作者: 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

《完》

相关文章

  • 第六章.使用集合类

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

  • Java集合

    集合框架的部分优点 1、使用核心集合类降低开发成本,而非实现我们自己的集合类。2、随着使用经过严格测试的集合框架类...

  • 集合源码之hashMap

    引子 java的集合类使我们经常使用的,而hashmap更是集合中常用的集合类。由于使用的散列,hashmap的c...

  • Java(二)Java基础--05集合类

    一、常用集合类的使用 常用集合类 二、ArrayList 和 LinkedList 和 Vector 的区别 1、...

  • 9-多线程中集合类的问题

    诡异的HashMap 在JDK中,我们有很丰富的的已经写好的类库区使用,其中使用最多的就是集合类的,集合类中提供了...

  • Java集合框架

    1.1.1 集合框架--使用 从上面的图可以看出java集合类主要有以下几种: 1 .List结构的集合类 Arr...

  • 集合、数组转换

    数组==>集合使用 Arrays 类提供的方法快速转换,Arrays.asList(); 集合==>数组

  • Spring之bean属性注入

    bean属性注入 Properties:属性集合类。是一个可以和IO流相结合使用的集合类。 Properties ...

  • 设计模式-迭代器(Iterator)模式

    主要角色 集合类 迭代器 职责 使用集合类中的迭代器,迭代数据,不停地获取下一个。 角色关系 课程类 课程集合接口...

  • PHCollection

    父类:PHObject Photos的资源的集合和集合列表的抽象超类(父类)。 一、概述 你不应该创建或直接使用这...

网友评论

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

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