我想发布我的代码的三个不同版本,其中一个可以工作,但我不能采用这种方法。
版本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:不工作。由于它有验证错误,我尝试使用版本1和版本2
//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 = []
)。该代码尝试添加
到listOfRecords
,这会触发NPE。您的第二个示例确实初始化了您的 var,因此有效。
我不明白为什么你会收到如此无用的错误消息。
关于java - 如何将 LinkedHashMap 元素添加到列表并在 Groovy 中使用 groupBy 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59804623/