好的,这是一件相当简单的事情,但我无法弄清楚这一点。我有一个groovy列表,其中包含一些对象:
def listOfTings = [
["type": "A", "value": 1],
["type": "B", "value": 3],
["type": "A", "value": 2],
["type": "B", "value": 2]
]
我希望得到一个地图,例如groupBy(type)max(value):
["A": 2, "B": 3]
但我找不到groupBy方法,而且我还没有使用collectEntries
找出它。是否有一些标准的方法来实现这样的结果?
答案 0 :(得分:1)
请尝试以下操作:
listOfTings.groupBy { it.type }.collectEntries { [(it.key): it.value.max { it.value }.value] }
首先groupBy
将创建按type
字段分组的列表地图:
[A:[[type:A,value:1],[type:A,value:2]],B:[[type:B,value:3],[type:B,value:2] ]
接下来,带有collectEntries
的{{1}}会选择包含最多it.value.max { it.value }
字段的单个条目:
[A:[类型:A,值:2],B:[类型:B,值:3]]
使用value
挑选value
只会提取it.value.max { it.value }.value
字段,而不是整个条目:
[A:2,B:3]
希望有所帮助:)