Я пытаюсь использовать методы Groovy groupBy и max для суммирования данных в моем списке.
До сих пор я создал класс с именем allowance, который я использую для создания списка разрешений, например
class allowance {
Integer StartDate
Integer EndDate
String PayCode
Integer CreatedOn
}
def lAllowances = [
new allowance(StartDate: 20200330, EndDate: 99991231, PayCode: "PC_DFB1", CreatedOn: 20200330)
,new allowance(StartDate: 20200330, EndDate: 99991231, PayCode: "PC_DFB1", CreatedOn: 20200420)
,new allowance(StartDate: 20180405, EndDate: 20200329, PayCode: "PC_DFB1", CreatedOn: 20180125)
,new allowance(StartDate: 20200330, EndDate: 99991231, PayCode: "PC_DFB2", CreatedOn: 20200330)
,new allowance(StartDate: 20100405, EndDate: 99991231, PayCode: "PC_CAR1", CreatedOn: 20100103)
]
Теперь мне нужно сгруппировать этот список и вернуть последнее созданное пособие на основе CreatedOn для ключа группировки (PayCode, StartDate).
Я могу получить его, чтобы вернуть то, что мне нужно, с одним Закрытие groupBy, например,
lAllowances.groupBy {it.PayCode}.collectEntries {[(it.key): it.value.max {it.CreatedOn}]}.each{ k,v ->
mAllowances.put (iCount, [StartDate: v.StartDate, EndDate: v.EndDate, PayCode: k])
iCount++
}
, но когда я указываю второе закрытие, метод max, похоже, не работает или, по крайней мере, он не возвращает того, что я думал, например,
lAllowances.groupBy ({it.PayCode},{it.StartDate}).collectEntries {[(it.key): it.value.max {it.CreatedOn}]}.each{ k,v ->
mAllowances.put (iCount, [StartDate: v.StartDate, EndDate: v.EndDate, PayCode: k])
iCount++
}
Ожидаемый набор результатов после группировки на основе приведенных выше данных будет выглядеть примерно так:
PayCode: "PC_DFB1", StartDate: 20200330, EndDate: 99991231, CreatedOn: 20200420
PayCode: "PC_DFB1", StartDate: 20180405, EndDate: 20200329, CreatedOn: 20180125
PayCode: "PC_DFB2", StartDate: 20200330, EndDate: 99991231, CreatedOn: 20200330
PayCode: "PC_CAR1", StartDate: 20100405, EndDate: 99991231, CreatedOn: 20100103
Любая помощь, которую вы можете оказать для решения этой проблемы, будет принята с благодарностью.
Спасибо!