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

时间:2017-07-25 12:12:35

标签: groovy

好的,这是一件相当简单的事情,但我无法弄清楚这一点。我有一个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找出它。是否有一些标准的方法来实现这样的结果?

1 个答案:

答案 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]

希望有所帮助:)