groovy使用groupBy max将列表转换为映射

groovy使用groupBy max将列表转换为映射,groovy,Groovy,好的,这是一件相当简单的事情,但我无法理解。我有一个groovy列表,其中包含一些对象,如: def listOfTings = [ ["type": "A", "value": 1], ["type": "B", "value": 3], ["type": "A", "value": 2], ["type": "B", "value": 2] ] 我想从中得到一个映射,比如groupBy(type)max(value): 但是我找不到groupBy方法,而且我还没有使用col

好的,这是一件相当简单的事情,但我无法理解。我有一个groovy列表,其中包含一些对象,如:

def listOfTings = [
  ["type": "A", "value": 1],
  ["type": "B", "value": 3],
  ["type": "A", "value": 2],
  ["type": "B", "value": 2]
]
我想从中得到一个映射,比如groupBy(type)max(value):

但是我找不到groupBy方法,而且我还没有使用
collectEntries
找到它。是否有一些标准方法可以达到这样的效果?

尝试以下方法:

listOfTings.groupBy { it.type }.collectEntries { [(it.key): it.value.max { it.value }.value] }
首先,
groupBy
将创建按
类型分组的列表映射
字段:

[A:[[type:A,value:1],[type:A,value:2]],B:[[type:B,value:3],[type:B,value:2]]

接下来,
collectEntries
with
it.value.max{it.value}
将选择具有最大
value
字段的单个条目:

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

使用
it.value.max{it.value}.value
拾取
value
将只提取
value
字段,而不是整个条目:

[A:2,B:3]

希望有帮助:)

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