我想在给定的 map 中找到特定的键。如果找到该键,我想从 map 中获取该键的值。
这是我到目前为止所做到的:
def mymap = [name:"Gromit", likes:"cheese", id:1234]
def x = mymap.find{ it.key == "likes" }
if(x)
println x.value
这有效,输出如预期的那样是“cheese”。很好,但我不想在最后执行 x.value
,也不想执行 if(x)
。我希望 x 以某种方式直接包含该值。
我无法像这样直接将值放入 x 中:
def mymap = [name:"Gromit", likes:"cheese", id:1234]
def x = mymap.find{ it.key == "likesZZZ" }.value
println x
因为在这种情况下 find 闭包为 null,所以会导致空指针异常。当然,上面的代码片段在 it.key == "likes"
时有效,但我不确定我总能在 map 中找到目标键。
什么是在 map 上执行此操作的“Groovier”且安全的方法:
- 检查 map 是否有给定的键,
- 如果是,则获取该键的值
最佳答案
使用 map 的重点是直接访问。如果您确定映射中的值永远不会是 Groovy-false
,那么您可以这样做:
def mymap = [name:"Gromit", likes:"cheese", id:1234]
def key = "likes"
if(mymap[key]) {
println mymap[key]
}
但是,如果该值可能是 Groovy-false
,您应该使用:
if(mymap.containsKey(key)) {
println mymap[key]
}
不过,如果您知道该值不会是 Groovy-false
(或者您可以忽略它),并且想要一个默认值,那么最简单的解决方案如下所示:
def value = mymap[key] ?: "default"
所有这三个解决方案都比您的示例快得多,因为它们不会扫描整个 map 以查找键。它们利用 HashMap
(或 LinkedHashMap
)设计,使直接键访问几乎是即时的。
关于dictionary - groovy:安全地在映射中找到键并返回其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14196454/