实现自定义list.addAll()

时间:2012-01-16 23:05:59

标签: grails collections groovy

我正在使用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

1 个答案:

答案 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]