groovy的map类型

声明

声明一个空的map

def map1 = [:]
assert map1.size() == 0

声明一个有初始化数据的map

def myMap = [a:1,b:2,c:3]
assert myMap.size() == 3

ps: 这里的key都没有加单引号或者双引号,是因为a,b,c你也只能定义成字符串类型,所以Groovy会默认它是String,数字就不行,你不加引号就是Integer类型,如下会报错

assert ['1':1] == [1:1]

正常声明的map是HashMap类型的,如果想要TreeMap,我们可以使用as关键字来声明 。

def treeMap = [a:1,b:2,c:3] as TreeMap
assert treeMap instanceof TreeMap

常用方法

  1. 向map中添加元素除了Java的JDK我们可以直接
map1["a"] = 1
map1["b"] = 2
map1["c"] = 3
  1. 获取的时候可以
map1["a"]
map1.a

或者是使永get方法

assert myMap.get('f',4) == 4

如上使用的话,如果这个map里面原来没有"f"这个键的话,会新增 [‘f’:4]进入map

  1. 获取键和值的集合
assert myMap.keySet() == (['a','b','c','f'] as HashSet)

def values = myMap.values()
println values
assert values instanceof Collection
  1. 新增的every和any方法
    用来判断,集合中所有的元素都满足一个的条件和有没有元素满足一定的条件
assert myMap.any {
    it.value <10
}

assert myMap.every {
    it.value <10
}
  1. 遍历
    遍历使用闭包可以入参可以是两个,一个是entry,如果传入两个的话就是key和value,一般来说第二种比较方便
myMap.each {
    key,value ->
        println "$key : $value"
}
  1. 利用subMap方法获取一个新的map

subMap方法里面传入的是原来map中有的键值

def subMap = myMap.subMap(['a'])
assert subMap.size() == 1
  1. findAll筛选map中的entry
def found = myMap.findAll {
    it.value < 4
}
println found