реализация пользовательского list.addAll () - PullRequest
0 голосов
/ 17 января 2012

Я использую groovy / grails, и в моем сервисе есть ResultList, который я использую для хранения результатов запроса.
Список содержит объекты транзакций каждого месяца, такие как txn_jan, txn_feb ... txn_dec.
Итак, содержимое списка выглядит следующим образом:

def qresultList = [txn_jan1,txn_jan2,txn_feb1,txn_april1,txn_dec1]


Каждый из них представляет собой объект, содержащий поля location и количество транзакций (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 Ответ

2 голосов
/ 17 января 2012

Звучит так, как будто вы хотите использовать 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]

Альтернативой является просто итерация по списку и накопление общих транзакций на карте:

def totalsByLocation2 = [:].withDefault{0}

qresultList.each { totalsByLocation2[it.location] += it.txs }

assert totalsByLocation2 == ['a': 40, 'b': 20]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...