Map Groovy—如何在不更新映射的情况下使用默认值获取映射值
如何从映射中读取给定键的值,并提供默认值(如果映射不包含指定键的条目,则使用), 但是不更新地图-这就是Map Groovy—如何在不更新映射的情况下使用默认值获取映射值,map,groovy,Map,Groovy,如何从映射中读取给定键的值,并提供默认值(如果映射不包含指定键的条目,则使用), 但是不更新地图-这就是get方法所做的: get(对象键,对象默认值) 在映射中查找给定键的项并返回值-除非没有该项的条目 给定键在这种情况下,将默认值添加到映射中并返回 那个 Ofc它必须是一个单一的、简短的表达式 出于性能原因,在该映射上创建一个deepcopy(以便对其进行更新)并使用前面提到的get不是一个解决方案 不同语言的等价物: JavaScript:map[“someKey”]| |“defaul
get
方法所做的:
get(对象键,对象默认值)
在映射中查找给定键的项并返回值-除非没有该项的条目
给定键在这种情况下,将默认值添加到映射中并返回
那个
get
不是一个解决方案- JavaScript:
map[“someKey”]| |“defaultValue”
- Scala:
map.getOrElse(“someKey”,“defaultValue”)
- Python3:
map.get(“someKey”,“defaultValue”)
map.someKey ?: 'default value'
map.containsKey('someKey') ? map.someKey : 'default value'
请注意,如果someKey确实存在,但与该键关联的映射中的值为null、零、false或任何根据Groovy真理规则计算为false的值,那么将返回默认值,这可能是您想要的,也可能不是您想要的
更详细的方法可能是这样的
map.someKey ?: 'default value'
map.containsKey('someKey') ? map.someKey : 'default value'
使用Java的getOrDefault映射方法(从Java 8开始):
它不会向地图添加新的密钥。正确,但有点长。可以写得更短吗?需求不是很详细,但如果需求类似,如果映射包含某个键,则返回该值,否则返回我提供的一些默认值,并且映射不应作为过程的一部分进行修改(这是在原始问题中表示的),那么,我不知道有哪种更简短的语法来表达这一点。您可以将自己的方法元编程到Map上,这样做可以简化调用。谢谢@JeffScottBrown!我想知道作为一名语言设计师,你有什么理由认为
get()
方法修改底层映射是个好主意。谢谢你指出这一点,我甚至都不知道。我不知道有多少人被这咬过。这就像对基础映射进行排序一样愚蠢,或者将值从0
返回到11
一样愚蠢:(