该笔记将记录:在 Apache Groovy 中,常用 Map 操作,以及相关问题处理。
基础操作(增删改查)
增 | 创建 Map 类型
def ept = [:] def map = [name: "Jerry", age: 42, city: "New York"] // 使用变量作为 Key def varA = "abc" def varB = "xyz" def map = [(varA):1, (varB):2]
改 | 修改 Map 内容
向 Map 中添加元素
map['key'] = "value" map.key = "value" map.'key' = "value" map.put('john', 41) // 合并两个 Map 对象 assert [ a: true, b: false ] + [ a: false ] == [ a: false, b: false ] assert [ a: false ] + [ a: true, b: false ]== [ a: true, b: false ] assert [ a: true, b: false ] << [ a: false ] == [ a: false, b: false ] // 该写法更直观
删除
删除元素
map.remove('key-name')
查询 | get, find, findAll, …
从 Map 中获取元素
https://blog.mrhaki.com/2009/11/groovy-goodness-get-value-from-map-or.html
map['key'] map.key map.'key' // 推荐 get() 方法:当 key 不存在时不会返回错误,还能够指定默认值 map.get('key') map.get('key', '') // 指定默认值
遍历 | each
def map = [ 'iPhone':'iWebOS', 'Android':'2.3.3', 'Nokia':'Symbian', 'Windows':'WM8' ] for ( e in map ) { print "key = ${e.key}, value = ${e.value}" } map.each{ k, v -> println "${k}:${v}" }
提取 | keySet(), values(), …
Get key in groovy maps – Stack Overflow
获取 MAP 全部的 KEY:
map.keySet() as String[] map.keySet() as List map.keySet().collect() // 或者,遍历处理 map.each{ key, value -> print key; }
获取 MAP 全部的 VALUE:
map.values()
比较 | 判断两个 Map 的关系
判断某个 Map 包含另个 Map 对象
java – Check whether a map contains all contents of another map – Stack Overflow
mapA.entrySet().containsAll(mapB.entrySet())
合并 | +, …
How can I compare two lists in Groovy – Stack Overflow
def a = ["foo", "bar", "baz", "baz"] def b = ["foo", "qux"] assert ["bar", "baz", "baz", "qux"] == ((a - b) + (b - a))
参考文献
Groovy Add To Map Examples – Grails Cookbook
Get the list from Map and filter using groovy – Stack Overflow
dictionary – Does Groovy have method to merge 2 maps? – Stack Overflow