Groovy - 使用Iterator添加地图条目

时间:2012-10-30 12:51:38

标签: groovy map

请解释一下,为什么这不起作用(JDK7上的Groovy 2.0.5)。我只想从列表中添加一些映射条目。

def map = new HashMap<String,String>()
map << ["key":"value"]

def list = ["a","b","c"]
list.each {
    map << [it:"value"]
}
println map
println map.a
println map.containsKey("a")

/*
[key:value, a:value, b:value, c:value]
null        <- ?
false       <- ?
*/

它也无法使用:

map << ["$it":"value"]

但它正在使用:

map << [(""+it):"value"]

???

1 个答案:

答案 0 :(得分:14)

map << [it:"value"]

只需使用名为it的密钥即可。如果你用括号括起来:

map << [(it):"value"]

它按你想要的方式工作......

如果你这样做:

map << ["$it":"value"]

然后,您可以看到GStringImpl:作为关键而不是java.lang.String

println map.keySet()*.getClass().name
// prints [GStringImpl, GStringImpl, String, GStringImpl ]

(为简洁省略了包名称)

然后,您尝试使用String查找GString键,这会失败(请参阅'GStrings不是字符串'部分on this page

这有效:

map << [(""+it):"value"]

因为它只是创建一个String(通过将it附加到空字符串)

无论如何......长话短说,请使用[(it):'value']