Map是“键-值”对的集合,在Groovy中键key不一定是String,可以是任何对象(实际上Groovy中的Map就是java.util.Linke dHashMap)。如下:
//定义一个Map
def colors = [red: ‘#FF0000’, green: ‘#00FF00’, blue: ‘#0000FF’]
//获取一些指定key的value进行判断操作
assert colors[‘red’] == ‘#FF0000’
assert colors.green == ‘#00FF00’
//给指定key的对赋值value操作与判断
colors[‘pink’] = ‘#FF00FF’
colors.yellow = ‘#FFFF00’
assert colors.pink == ‘#FF00FF’
assert colors[‘yellow’] == ‘#FFFF00’
//判断Map的类型
assert colors instanceof java.util.LinkedHashMap
//访问Map中不存在的key为null
assert colors.unknown == null
//定义key类型为数字的Map
def numbers = [1: ‘one’, 2: ‘two’]
assert numbers[1] == ‘one’
对于Map需要特别注意一种情况,如下:
//把一个定义的变量作为Map的key,访问Map的该key是失败的
def key = ‘name’
def person = [key: ‘Guillaume’]
assert !person.containsKey(‘name’)
assert person.containsKey(‘key’)
//把一个定义的变量作为Map的key的正确写法—添加括弧,访问Map的该key是成功的
person = [(key): ‘Guillaume’]
assert person.containsKey(‘name’)
assert !person.containsKey(‘key’)
【工匠若水 [http://blog.csdn.net/yanbober](() 转载请注明出处。[点我开始Android技术交流](()】
3 运算符
=========
关于Groovy的运算符介绍类似于上面一样,我们重点突出与Java的不同点,相同点自行脑补。
Groovy支持**
次方运算符,如下:
assert 2 ** 3 == 8
def f = 3
f **= 2
assert f == 9
Groovy非运算符如下:
assert (!true) == false
assert (!‘foo’) == false
assert (!‘’) == true
Groovy支持?.
安全占位符,这个运算符主要用于避免空指针异常,譬如:
def person = Person.find { it.id == 123 }
def name = person?.name
assert name == null
Groovy支持.@
直接域访问操作符,因为Groovy自动支持属性getter方法,但有时候我们有一个自己写的特殊getter方法,当不想调用这个特殊的getter方法则可以用直接域访问操作符。如下:
class User {
public final String name
User(String name) { this.name = name}
String getName() { “Name: $name” }
}
def user = new User(‘Bob’)
assert user.name == ‘Name: Bob’
assert user.@name == ‘Bob’
Groovy支持.&
方法指针操作符,因为闭包可以被作为一个方法的参数,如果想让一个方法作为另一个方法的参数则可以将一个方法当成一个闭包作为另一个方法的参数。如下:
def list = [‘a’,‘b’,‘c’]
//常规写法
list.each{
println it
}
String printName(name){
println name
}
//方法指针操作符写法
list.each(this.&printName)
Groovy支持将?:
三目运算符简化为二目,如下:
displayName = user.name ? user.name : ‘Anonymous’
displayName = user.name ?: ‘Anonymous’
Groovy支持*.
展开运算符