2017-07-25 68 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帮助:)