除了丰富的列表处理功能,Groovy 还提供了坚固的映射机制。同列表一样,映射也是本地数据结构。而且 Groovy 中的任何映射机制在幕后都是 java.util.Map
的实例。
Java 语言中的映射
Java 语言中的映射是名称-值对的集合。所以,要用 Java 代码创建典型的映射,必须像下面这样操作:
Map<String, String>map = new HashMap<String, String>(); |
一个 HashMap
实例容纳两个名称-值对,每一个都是 String
的实例。
通过 Groovy 进行映射
Groovy 使得处理映射的操作像处理列表一样简单 — 例如,可以用 Groovy 将上面的 Java 映射写成
def hash = [name:"Andy", "VPN-#":45] |
请注意,Groovy 映射中的键不必是 String
。在这个示例中,name
看起来像一个变量,但是在幕后,Groovy 会将它变成 String
。
全都是 Java
接下来创建一个新类 Mapper
并加入上面的代码。然后添加以下代码,以证实底层的代码是真正的 Java 代码:
assert hash.getClass() == java.util.LinkedHashMap |
可以看到 Groovy 使用了 Java 的 LinkedHashMap
类型,这意味着可以使用标准的 Java 一样语句对 hash
中的项执行 put
和 get
操作。
hash.put("id", 23) |
有 groovy 特色的映射
现在您已经看到,Groovy 给任何语句都施加了魔法,所以可以用 .
符号将项放入映射中。如果想将新的名称-值对加入映射(例如 dob
和 “01/29/76”),可以像下面这样操作:
hash.dob = "01/29/76" |
.
符号还可以用来获取项。例如,使用以下方法可以获取 dob
的值:
assert hash.dob == "01/29/76" |
当然 .
要比调用 get()
方法更具 Groovy 特色。
位置映射
还可以使用假的位置语法将项放入映射,或者从映射获取项目,如下所示:
assert hash["name"] == "Andy" |
但是,请注意,在使用 []
语法从映射获取项时,必须将项作为 String
引用。