dictionary - groovy:安全地在映射中找到键并返回其值

标签 dictionary groovy closures

我想在给定的 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/

相关文章:

javascript - D3 : Using a closure to update a selection without re-binding data

JavaScript oop : Designing classes correctly

python - 有条件地计算嵌套 python json 字典中值的数量

list - Groovy - 如何根据元素的内容从列表中删除元素?

java - 如何使用 Google Calendar API 获取特定时间范围内的所有日历条目

elasticsearch - 如何将脚本化度量标准中的Elasticsearch字段的类型从Long更改为Double?

swift - 为什么这个闭包没有我期望的参数?

Python:创建带有书面报告路线的 png map 的最佳方法是什么?

python - CSV 文件的词典列表

java - 在语言工具上创建字典