gpt4 book ai didi

groovy - Groovy 中的内联条件映射字面量

转载 作者:行者123 更新时间:2023-12-04 23:40:35 27 4
gpt4 key购买 nike

在 Groovy 中使用 Maps/JsonBuilder 处理一些翻译/映射功能。

是否有可能(无需在 map 文字创建之外创建额外的代码).. 有条件地包含/排除某些键/值对?一些事情沿着以下路线..

 def someConditional = true   

def mapResult =
[
"id":123,
"somethingElse":[],
if(someConditional){ return ["onlyIfConditionalTrue":true]}
]

预期成绩:
如果 someConditional 如果为 false,则 mapResult 中将只存在 2 个键/值对。

如果 someConditional 如果为真,则所有 3 个键/值对都将存在。

请注意,如果我创建方法/并将事物拆分,我确信它可以完成..为了保持简洁,我希望将事物保留在 map 创建中。

最佳答案

您可以通过 with 自助:

[a:1, b:2].with{
if (false) {
c = 1
}
it
}

有一个小 helper :
Map newMap(m=[:], Closure c) {
m.with c
m
}

例如。:
def m = newMap {
a = 1
b = 1
if (true) {
c = 1
}
if (false) {
d = 1
}
}

assert m.a == 1
assert m.b == 1
assert m.c == 1
assert !m.containsKey('d')

或者传递一个初始 map :
newMap(a:1, b:2) {
if (true) {
c = 1
}
if (false) {
d = 1
}
}

编辑

从 Groovy 2.5 开始, with 有了替代方案叫 tap .它
with但不返回闭包的返回值,
但代表。所以这可以写成:
[a:1, b:2].tap{
if (false) {
c = 1
}
}

关于groovy - Groovy 中的内联条件映射字面量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38677012/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com