Groovy上的三值快捷方式

Groovy上的三值快捷方式,groovy,Groovy,我知道三元运算符本身已经是一种快捷方式,但我仍然想知道在groovy中是否有这样的快捷方式: String typeFilter = (params?.type) ? params.type : "" 我想做的是: 如果HashMapparams有一个type键,将该键的值分配给typeFilter,否则,用空字符串分配typeFilter 我在考虑是否可以避免键入params?.type两次,或者这是给定场景中最短的代码?感谢您的反馈。您刚才有效地描述了elvis操作员: String ty

我知道三元运算符本身已经是一种快捷方式,但我仍然想知道在
groovy
中是否有这样的快捷方式:

String typeFilter = (params?.type) ? params.type : ""
我想做的是:

如果
HashMap
params
有一个
type
键,将该键的值分配给
typeFilter
,否则,用空字符串分配
typeFilter


我在考虑是否可以避免键入
params?.type
两次,或者这是给定场景中最短的代码?感谢您的反馈。

您刚才有效地描述了elvis操作员:

String typeFilter = params.type ?: ""
更多信息请点击此处:

只需确保您了解常规真理() 尤其是当涉及到
0
vs
null
vs
empty
的值时。考虑这一点:

params.age = 0
...
// elsewhere in the code
params.age = params.age ?: 6 // if no age provided default to 6

这将把
参数age设置为
6
,尽管if已经用
0
初始化

虽然@defectus提供的答案大体正确,但也有一些极端情况。考虑下面的例子:

def s = ''
def r = s.empty ?: 'notempty'
assert r == true

在上面的示例中,返回的是
true
,而不是空字符串。对一些人来说,这可能是显而易见的,但当我不久前面对它时,这是一个真正的问题;)

您是否考虑过键
type
具有空值的拐角情况?如果发生这种情况,Elvis操作员将返回RHS。这可能与您试图实现的目标无关,但不符合您的要求(字面意思):

如果
HashMap
params
有一个
type
键,将该键的值分配给
typeFilter
,否则,用空字符串分配
typeFilter

例子。(为了使输出更清晰,我使用了“none”而不是空字符串。)


嘿,第一次听到它。。。为什么叫它
Elvis
operator?因为发型。@Opal哇!我没有注意到
?:
符号!谢谢你的关心。。。显然,我已经把错误陷阱和过滤器放在了上面的代码行之前,我只是没有把它包括在问题中。
println( [:].type ?: 'none' )
=> none

println( [type: 42].type ?: 'none' )
=> 42

// But do you want null or 'none' in this case?
println( [type: null].type ?: 'none' )
=> none