「Groovy」- 常用 MAP 操作

  CREATED BY JENKINSBOT

问题描述

该笔记将记录:在 Apache Groovy 中,常用 Map 操作,以及相关问题处理。

解决方案

基础操作(增删改查)

增:向 Map 中添加元素

map.put('john', 41)
map['key'] = "value"
map.key    = "value"
map.'key'  = "value"

// 合并两个 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 中删除元素

map.remove('key-name')

查:从 Map 中获取元素

map['key']
map.key
map.'key'

// 我们推崇 get() 方法
// 当 key 不存在时不会返回错误,还能够指定默认值
map.get('key')
map.get('key', '') // 指定默认值

遍历 MAP 集合

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}" }

提取 MAP 全部的 KEY, VALUE

获取 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 对象:

mapA.entrySet().containsAll(mapB.entrySet())

参考文献

Loop through Map in Groovy?
Get key in groovy maps – Stack Overflow
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
Groovy Goodness: Get Value from Map or a Default Value – Messages from mrhaki
java – Check whether a map contains all contents of another map – Stack Overflow