Groovy代码示例 – map

map的定义

map一般用于key-value键值对的存放。在groovy中你可以使用两种方式定义map:

  • 1)定义一个空map然后再存放key-value键值
  • 2)直接定义带有初始值的map

可以对比一下两种方式的差别和用法。

//定义一个空的map
def emptyStudentMap = [:]
println emptyStudentMap // [:]

//定义带有初始值的map
def studentMapWithInitialValue = [name: "John", surname: "Doe", age: 17]
println studentMapWithInitialValue // [name:John, surname:Doe, age:17]

需要注意的是[]中的冒号:,表明这是一个map而不是list

而对于map中的初始值,key值是不需要双引号""的,默认都是字符串类型。

map中添加键值对

groovy中添加键值对可以采用多种方式,操作起来十分方便,具体请看以下代码:

def student = [:] // 定义一个空的map
student.put('name', 'John') // java语法的方式添加键值对
student['surname'] = 'Doe' // 也可以使用中括号的方式添加键值对
student << [age: 17] // 这种方式类似于unix的重定向符号,将键值对放到map中
student.class = "11C" //使用.点号的方式也是可以的
student.'school' = "Groovy School" //同上面类似,但是可以放一些特殊符号

println student // [name:John, surname:Doe, age:17, class:11C, school:Groovy School]

map中删除键值对

从map中删除键值对像添加一样简单,你可以用以下几种方式删除。

def student = [name: 'John', surname: 'Doe', age: 17, class: '11C', school: 'Groovy School']
println student // [name:John, surname:Doe, age:17, class:11C, school:Groovy School]

//使用remove方法删除
student.remove('age') // Remove by key
println student // [name:John, surname:Doe, class:11C, school:Groovy School]

//使用减法删除,不会改变原map
student = student - [school: 'Groovy School'] // This is something like arithmetic operation
println student // [name:John, surname:Doe, class:11C]

map获取值为null时返回默认值

有时候,我们需要对于map中的返回值调用函数,如果返回值为null的时候会报NullPointerException。为了避免出现这个异常,需要检查是否为null。groovy为了避免我们获取到null,提供了方法当返回值为null时,自动返回默认值。请参考以下代码:

def student = [name: 'John', surname: 'Doe', age: 17, class: '11C', school: 'Groovy School']

//map中不存在key为'teacher'的键值对,所以返回new Teacher(name : "Betty")
def result = student.get('teacher', new Teacher(name: "Betty"))

println result // Teacher(name:Betty)

上面的例子中,map中不存在'teacher'所以返回new Teacher(),因此不需要我们考虑NullPointerException的处理。

map合并

groovy中的map合并也是非常简单,就像字符串连接那样。

def studentProp1 = [name: 'John', surname: 'Doe']
def studentProp2 = [age: 17, class: '11C']
def studentProp3 = [school: 'Groovy School']

//使用加法合并多个map
def student = studentProp1 + studentProp2 + studentProp3

//合并后的结果
println student // [name:John, surname:Doe, age:17, class:11C, school:Groovy School]

map对象合并在groovy中可以很容易实现,代码示例如下:

1)使用+号

assert [ a: true, b: false ] + [ a: false ] == [ a: false, b: false ]

2)或者使用左移操作,代码示例如下:

assert [ a: true, b: false ] << [ a: false ] == [ a: false, b: false ]

两者的区别是:

  • 左移操作是把右边的map合并到左边的map中,改变了左边map的内容
  • 使用+则根据左边的map创建了一个新的map,并将右边的map合并到新map中

获取两个map的交集

有时候当你需要在不同的map中查找相同键值对的时候,groovy为了提供了方便的方法获取map交集。

def student1 = [name: 'John', surname: 'Doe', age: 17]
def student2 = [surname: 'Bunny', age: 17]

//获取student1和student2的交集
def sameProperties = student1.intersect(student2) // [age: 17]

println sameProperties // [age:17]

以上代码会找出student1和student2两个map的键值对交集。容易发现age:17是两个map都有的键值对,交集为[age:17]

获取map的键(key)集合与值(value)集合

groovy中可以像java中那样获取map的键、值的集合。

def student = [name: 'John', surname: 'Doe', age: 17]

//获取键key集合
def studentKeys = student.keySet() // [name, surname, age]
println studentKeys // [name, surname, age]

//获取值value集合
def studentValues = student.values() // [John, Doe, age]
println studentValues // [John, Doe, 17]

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/05/07/groovy-code-example-map/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Groovy代码示例 – map
map的定义 map一般用于key-value键值对的存放。在groovy中你可以使用两种方式定义map: 1)定义一个空map然后再存放key-value键值 2)直接定义带有初始值的ma……
<<上一篇
下一篇>>
文章目录
关闭
目 录