我正在使用groovy / grails,我在我的服务中有一个ResultList,用于存储查询结果。
该列表包含每月交易的对象,如txn_jan,txn_feb ... txn_dec。
所以列表内容如下:
def qresultList = [txn_jan1,txn_jan2,txn_feb1,txn_april1,txn_dec1]
其中每个都是一个包含字段位置和事务计数(tcount)的对象。
我想迭代列表以获取不同位置的列表及其总结的事务计数。所以类似于下面的伪代码:
if txn_jan1.location = txn_feb1.location then the output list should contain txn_jan1.location and count= txn_jan1.tcount + txn_feb1.tcount.
最后在结果列表中,我需要列出不同的位置及其更新的计数
我怎么用groovy写这个?
问候,
Priyank
答案 0 :(得分:2)
听起来您希望使用groupBy
按位置分组。然后,您可以收集这些组以获得交易总额。例如:
def qresultList = [
[location: 'a', txs: 10],
[location: 'b', txs: 20],
[location: 'a', txs: 30]
]
def totalsByLocation1 = qresultList.groupBy{ it.location }.
collectEntries{ key, vals -> [key, vals*.txs.sum()] }
assert totalsByLocation1 == ['a': 40, 'b': 20]
另一种方法是迭代列表并在map中累积总交易数:
def totalsByLocation2 = [:].withDefault{0}
qresultList.each { totalsByLocation2[it.location] += it.txs }
assert totalsByLocation2 == ['a': 40, 'b': 20]