如何将 LinkedHashMap 元素添加到列表并使用 Groovy 中的 groupBy 方法

How to add LinkedHashMap elements to a list and use groupBy method in Groovy

我想 post 我的代码的三个不同版本,其中一个可以工作,但我不能采用那种方法。

版本 1:不工作

List<LinkedHashMap> listOfRecords 
LinkedHashMap a = [product: 'p1', cluster: 'c1', salesorg: 's1']
LinkedHashMap b = [product: 'p2', cluster: 'c2', salesorg: 's2']
LinkedHashMap c = [product: 'p2', cluster: 'c3', salesorg: 's2']

listOfRecords.add(a)
listOfRecords.add(b)
listOfRecords.add(c)

println("listOfRecords : "+listOfRecords)
println("listOfRecords groupby : "+listOfRecords.groupBy { it.cluster })

Script failed on line: 6, with error: An error occurred while processing this page.

版本 2:有效,但我不想在声明期间将 LinkedHashMap 分配给列表。

LinkedHashMap a = [product: 'p1', cluster: 'c1', salesorg: 's1']
LinkedHashMap b = [product: 'p2', cluster: 'c2', salesorg: 's2']
LinkedHashMap c = [product: 'p2', cluster: 'c3', salesorg: 's2']

List listOfRecords=[a]
//listOfRecords.add(a)
listOfRecords.add(b)
listOfRecords.add(c)

println("listOfRecords : "+listOfRecords)
println("listOfRecords groupby : "+listOfRecords.groupBy { it.cluster })

版本 3:不工作。由于它有验证错误,我尝试使用 version1 和 version2

//List<LinkedHashMap> listOfRecords 
LinkedHashMap a = [product: 'p1', cluster: 'c1', salesorg: 's1']
LinkedHashMap b = [product: 'p2', cluster: 'c2', salesorg: 's2']
LinkedHashMap c = [product: 'p2', cluster: 'c3', salesorg: 's2']

List listOfRecords;
//List listOfRecords=[a]
listOfRecords.add(a)
listOfRecords.add(b)
listOfRecords.add(c)

println("listOfRecords : "+listOfRecords)
println("listOfRecords groupby : "+listOfRecords.groupBy { it.cluster })

A validation error was received from the Planning server. 'Error:The Groovy script failed to compile with internal error: Compile Error: [Static type checking] - No such property: cluster for class: java.lang.Object @ line 13, column 60. Rule SalesPLN.SALESREP.linkedhashmap'

提前致谢。

运行 您的原始脚本给出了空指针异常,因为您从未初始化 listOfRecords(例如,这应该修复它:def listOfRecords = [])。代码尝试 addlistOfRecords,这会触发 NPE。您的第二个示例确实初始化了您的 var,因此有效。

虽然我不明白你为什么会收到这样一条无用的错误消息。