前言
这一篇我们主要讲解下Groovy
数据结构中的映射,我们和上一篇列表一样分为两部分:定义和使用
映射的定义
我们在Java
中定义一个Map
一般是这样定义的Map map=new HashMap()
,我们Groovy
中定义和我们之前说的列表很像,列表里面每个元素是单个对应的,而我们的Map
是放括号里面每个元素是key:value
形式,举个例子:
def colors = ['red' : '#ff0000',
'green': '#00ff00',
'blue' : '#0000ff']
那么这个colors
属于哪个Map
呢?我们打印下,这里需要主要一点,之前我们打印都是直接用这个变量.class,但是这里不行,因为直接.class的话它会去它的元素中找key
为class
的元素,这个下面会说到,所以这里要使用getClass
我们可以看到系统默认的是LinkedHashMap
,如果你想修改它的类型就需要as
关键字了,这个之前几篇文章中有过介绍
注意:
map
定义时,key
通常是用不可变字符串或number
来定义。- 字符串不使用单引号时,
Groovy
默认会认为是不可变的单引号字符串。(如:red
与'red'
一样)
映射的使用
1.获取某个key对应的value值
如果我们想获取某一个key
对应的value
呢?在java
中,我们通过get
方法传入相应的key
,Groovy
中也提供了这个方法
但是在Groovy
中还提供了一个更为简便的方法,直接通过[]
或者.
,比如我们也是获取red
这个key
对应的value
值
2.添加元素
我们首先添加一个元素试试,我们想添加一个key
是``yellow,value
是#ffff00
这个元素,我们可以直接使用.
操作符
Groovy
会首先在我们的Map
中找,看看有没有key
是yellow
的元素,没有就新增一个,有就更新那个元素的value
值,我们测试下一个有的
我们发现并没有新增一个key
为red
的元素,而是更新了map
中key
为red
的value
那么我们想添加多个元素怎么做呢?Java
中我们通过putAll
方法,但是我们Groovy
中呢我们可以直接添加任意类型key-value
,我们举个例子看下
3.删除元素
4.遍历
这里主要是使用each
方法,这里我们定义一个Map
学生集合
def students = [
1: [number: '0001', name: 'Bob', score: 55, sex: 'male'],
2: [number: '0002', name: 'Johnny', score: 62, sex: 'female'],
3: [number: '0003', name: 'Claire', score: 73, sex: 'female'],
4: [number: '0004', name: 'Amy', score: 66, sex: 'male']
]
接下来都是以这个map
进行操作,我们先用最基本的方式
接着我们带索引的遍历,使用eachWithIndex
其实Groovy
中Map
遍历还有一种直接通过key-value
方式遍历的,方法和上面两个一样,我们写个例子
5.查找
Map
的查找和我们之前的List
基本是一样的
5.1获取及格的第一个学生
5.2获取及格的所有学生
5.3获取所有男同学及格人数
5.4获取所有及格同学的姓名
这里就需要使用一个新的方法collect
了,它会根据你传入的条件进行过滤
5.5对及格和不及格同学进行分组
这里我们同样要用到一个新的方法groupBy