「Groovy」- 常用 MAP 操作

该笔记将记录:在 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

Loop through Map in Groovy?

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