2017-07-25 69 views
1

好吧,這是一個相當簡單的事情,但我無法弄清楚這一點。我有它的一些對象常規列表,如:groovy變換列表成映射使用groupBy最大

def listOfTings = [ 
    ["type": "A", "value": 1], 
    ["type": "B", "value": 3], 
    ["type": "A", "value": 2], 
    ["type": "B", "value": 2] 
] 

,我希望得到一個地圖,它像GROUPBY(型)最大(值):

["A": 2, "B": 3] 

但我不能找到一個groupBy方法,我還沒有使用collectEntries來解決它。是否有一些標準的方法來實現這樣的結果?

回答

0

嘗試以下:

listOfTings.groupBy { it.type }.collectEntries { [(it.key): it.value.max { it.value }.value] } 

首先groupBy將創建地圖列表的由type字段分組一:

[A:[[類型:A,值:1],[式: A,值:2]],B:[[:B型,值:3],[:B型,值2]]]

接着,collectEntriesit.value.max { it.value }將挑選單

[A::[類型:A,值:2],B:[:B型,值:3]]

採摘valueit.value.max { it.value }.value僅將提取具有最大value字段條目一個value字段,而不是整個條目:

[A:2,B:3]

希望我t幫助:)