前言
这一篇我们主要讲解下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

6.排序
