Groovy - 如何在不更新地图的情况下使用默认值获取地图值

时间:2014-06-17 14:28:40

标签: map groovy

如何从地图读取给定键的值,并提供默认值(如果地图不包含指定键的条目,则使用该值), 但是没有更新地图 - 这就是get方法的作用:

  

get(Object key, Object defaultValue)

     

在Map中查找给定键的项并返回值 - 除非没有条目   给定键 ,在这种情况下,将默认值添加到地图 并返回   这一点。

  1. Ofc它必须是一个简短的表达
  2. 出于性能原因,在该地图上创建深度复制(因此可以更新)并使用提到的get不是解决方案。
  3. 不同语言的等价物:

    • JavaScript map["someKey"] || "defaultValue"
    • Scala map.getOrElse("someKey", "defaultValue")
    • Python3 map.get("someKey", "defaultValue")

2 个答案:

答案 0 :(得分:5)

考虑到您为其他一些语言提供的示例以及您表达的不更新地图的要求,也许您正在寻找类似的内容......

map.someKey ?: 'default value'

请注意,如果someKey确实存在,但是与该键关联的Map中的值为null,或者为零,false或根据Groovy真值规则计算为false的任何内容,则将返回默认值,可能是也可能不是你想要的。

更详细的方法可能是这样的......

map.containsKey('someKey') ? map.someKey : 'default value'

答案 1 :(得分:1)

使用Java的getOrDefault Map方法(自Java 8开始):

map.getOrDefault("someKey", "defaultValue")

它不会向地图添加新密钥。