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全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论