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
常用方法
- 向map中添加元素除了Java的JDK我们可以直接
map1["a"] = 1
map1["b"] = 2
map1["c"] = 3
- 获取的时候可以
map1["a"]
map1.a
或者是使永get方法
assert myMap.get('f',4) == 4
如上使用的话,如果这个map里面原来没有"f"这个键的话,会新增 [‘f’:4]进入map
- 获取键和值的集合
assert myMap.keySet() == (['a','b','c','f'] as HashSet)
def values = myMap.values()
println values
assert values instanceof Collection
- 新增的every和any方法
用来判断,集合中所有的元素都满足一个的条件和有没有元素满足一定的条件
assert myMap.any {
it.value <10
}
assert myMap.every {
it.value <10
}
- 遍历
遍历使用闭包可以入参可以是两个,一个是entry,如果传入两个的话就是key和value,一般来说第二种比较方便
myMap.each {
key,value ->
println "$key : $value"
}
- 利用subMap方法获取一个新的map
subMap方法里面传入的是原来map中有的键值
def subMap = myMap.subMap(['a'])
assert subMap.size() == 1
- findAll筛选map中的entry
def found = myMap.findAll {
it.value < 4
}
println found