List Groovy:使用groupBy列表求和

List Groovy:使用groupBy列表求和,list,groovy,sum,List,Groovy,Sum,我正在尝试得到结果->[abc:301.0,def:20.0] 这段代码在我的groovy控制台中运行良好。但不知何故,它在oracle产品中不起作用。 我得到下面的错误。如果删除[0]和[1],它将进行验证,但结果显然是错误的 找不到匹配的方法java.lang.Object#getAt(int)。请检查声明的类型是否正确,方法是否存在。 也许是我得出最终清单的方式造成了这个问题??在这里粘贴我的示例代码 def MapTest = [:] List b = [["abc"

我正在尝试得到结果->[abc:301.0,def:20.0]

这段代码在我的groovy控制台中运行良好。但不知何故,它在oracle产品中不起作用。 我得到下面的错误。如果删除[0]和[1],它将进行验证,但结果显然是错误的

找不到匹配的方法java.lang.Object#getAt(int)。请检查声明的类型是否正确,方法是否存在。

也许是我得出最终清单的方式造成了这个问题??在这里粘贴我的示例代码

def MapTest = [:]

List b = [["abc",1.0], ["def",20.0], ["abc",300.0]]

MapTest = b.groupBy {it[0]}.collectEntries {[(it.key): it.value.sum {it[1]}]}

似乎您在oracle中激活了一种
CompileStatic
groovy transformer

以下代码将在console中显示错误:

def MappingKey = '"'+"a"+"-"+"b"+"-"+"c"+"-"+"d"+'"'
def MappingKey1 = '"'+"a"+"-"+"b"+"-"+"c"+"-"+"d"+'"'
def Data = 1
def Data1 = 5
List a = []
List b = []
a.add("$MappingKey,$Data")
a.add("$MappingKey1,$Data1")
a.each
{
b.add("["+it+"]")   // [["a-b-c-d",1], ["a-b-c-d",5]]
}
println b.groupBy {it[0]}.collectEntries {[(it.key): it.value.sum {it[1]}]}
但是,对于完整的类型定义
List
来说,同一行可以正常工作:

//this throws exception getAt not found

@groovy.transform.CompileStatic
def f(List b){
    return b.groupBy {it[0]}.collectEntries {[(it.key): it.value.sum {it[1]}]}
}

f( [["abc",1.0], ["def",20.0], ["abc",300.0]] )
@groovy.transform.CompileStatic
def f(列表b){
返回b.groupBy{it[0]}.collectEntries{[(it.key):it.value.sum{it[1]}]}
}
f([“abc”,1.0],“def”,20.0],“abc”,300.0])

似乎您在oracle中激活了一种
CompileStatic
groovy transformer

以下代码将在console中显示错误:

def MappingKey = '"'+"a"+"-"+"b"+"-"+"c"+"-"+"d"+'"'
def MappingKey1 = '"'+"a"+"-"+"b"+"-"+"c"+"-"+"d"+'"'
def Data = 1
def Data1 = 5
List a = []
List b = []
a.add("$MappingKey,$Data")
a.add("$MappingKey1,$Data1")
a.each
{
b.add("["+it+"]")   // [["a-b-c-d",1], ["a-b-c-d",5]]
}
println b.groupBy {it[0]}.collectEntries {[(it.key): it.value.sum {it[1]}]}
但是,对于完整的类型定义
List
来说,同一行可以正常工作:

//this throws exception getAt not found

@groovy.transform.CompileStatic
def f(List b){
    return b.groupBy {it[0]}.collectEntries {[(it.key): it.value.sum {it[1]}]}
}

f( [["abc",1.0], ["def",20.0], ["abc",300.0]] )
@groovy.transform.CompileStatic
def f(列表b){
返回b.groupBy{it[0]}.collectEntries{[(it.key):it.value.sum{it[1]}]}
}
f([“abc”,1.0],“def”,20.0],“abc”,300.0])

“在oracle产品中”-这可能是什么?发生错误的地方是否有stacktrace或任何进一步的信息?你必须在你的代码中
getAt
(两者都
[…]
)-错误消息和哪一个失败之间有关系吗?你可以尝试解构:
b.groupBy{k,{u->k}.collectEntries{[it.key,it.value.sum{u,v->v}}}
谢谢你的回复。Oracle PBC。两者都失败了。[0]和[1]有两条错误消息-同一条消息。@cfrick如果您能给我一个主意,我还有其他方法可以实现同样的目标吗。似乎无法让这个工作。我的整个代码都依赖于这一行代码。我已经提出了一个替代方案。您是否尝试过它,但它不起作用?“在oracle产品中”-这可能是什么?发生错误的地方是否有stacktrace或任何进一步的信息?你必须在你的代码中
getAt
(两者都
[…]
)-错误消息和哪一个失败之间有关系吗?你可以尝试解构:
b.groupBy{k,{u->k}.collectEntries{[it.key,it.value.sum{u,v->v}}}
谢谢你的回复。Oracle PBC。两者都失败了。[0]和[1]有两条错误消息-同一条消息。@cfrick如果您能给我一个主意,我还有其他方法可以实现同样的目标吗。似乎无法让这个工作。我的整个代码都依赖于这一行代码。我已经提出了一个替代方案。你试过了吗?它不起作用吗?这是完全的错误。看起来有一些静态检查。我已经更新了我原来的问题。错误:Groovy脚本未能编译,出现内部错误:编译错误:[静态类型检查]-找不到匹配的方法java.lang.Object#getAt(int)。请检查声明的类型是否正确,以及方法是否存在于修改后的问题
b
变量是
字符串列表
,而不是
列表
。如果您想在groovy控制台中验证compile static,只需向上面代码中的函数添加注释:
@groovy.transform.CompileStatic
,这是完全错误。看起来有一些静态检查。我已经更新了我原来的问题。错误:Groovy脚本未能编译,出现内部错误:编译错误:[静态类型检查]-找不到匹配的方法java.lang.Object#getAt(int)。请检查声明的类型是否正确,以及方法是否存在于修改后的问题
b
变量是
字符串列表
,而不是
列表
。如果您想在groovy控制台中验证compile static,只需向上面代码中的函数添加注释:
@groovy.transform.CompileStatic