Groovy';列表上的分解/分解不一致?

Groovy';列表上的分解/分解不一致?,groovy,closures,decomposition,destructuring,Groovy,Closures,Decomposition,Destructuring,正面案例:可以进入列表 groovy> println GroovySystem.version groovy> final data1 = [[99,2] , [100,4]] groovy> data1.collect{x,y->x+y} 2.2.1 Result: [101, 104] 否定情况:不能这样做 也许你想要 data.values().collect{x,y->x+y} 另一种选择是 data.collect { key, val -

正面案例:可以进入列表

groovy> println GroovySystem.version  
groovy> final data1 = [[99,2] , [100,4]] 
groovy> data1.collect{x,y->x+y} 

2.2.1
Result: [101, 104]
否定情况:不能这样做

也许你想要

data.values().collect{x,y->x+y}
另一种选择是

data.collect { key, val -> val.with { x, y -> x + y } }

在第二个示例中,当对val调用collect时,val是[99,2];闭包将被调用,第一次传入99,然后再次传入2。将两个变量传递到闭包中没有任何意义,因为此时调用collect的是标量值列表。有没有理由认为这应该行得通?我不是在这里提出任何论点,我只是想理解。e、 g.本工程最终v=1;v、 收集{it+1};这也可能有效,但没有最终的l=[1,2];l、 收集{x,y->x+y};OP的代码迭代
数据
的键值对。第一个键值对是
x:[99,2]
,然后迭代发生在每个值的成员上。第一个成员是
99
——但提供的闭包包含两个参数——因此引发异常。如果OP希望对每对数字求和,那么我建议迭代
数据
的值,对每对数字求和,如上图所示。另一种方法是
数据.collect{key,val->val.with{x,y->x+y}
@tim_yates你能把你的评论作为答案吗?
data.collect { key, val -> val.with { x, y -> x + y } }