gpt4 book ai didi

groovy - 如何使用groovy对列表列表进行分组

转载 作者:行者123 更新时间:2023-12-02 06:11:26 25 4
gpt4 key购买 nike

我有一个列表列表,我想按市场名称和商品名称、挂牌价格进行分组:例如["Terra", "Wheat", 1000.0] - "Terra"是市场名称,"Wheat"是商品名称,1000.0 是价格

def marketCommodityGroup = [
["Merkato", "Wheat", 1000.0],
["Shola", "Wheat", 1875.0],
["Merkato", "Barley", 5000.0],
["Merkato", "Wheat", 1000.0],
["Merkato", "Wheat", 1500.0]
]

我希望输出是:

[
["Merkato": ["Wheat" : [1000.0, 1000.0, 1500.0]]],
["Merkato": ["Barley": [5000.0]]],
["Shola": ["Wheat": [1875.0]]]
]

最佳答案

好的,这是一种方法。

def mapped = marketCommodityGroup.groupBy {
[(it[0]) : it[1]]
}.collect { k,v ->
def grouping = k.find { true }
def prices = v.inject([]) { acc,val -> acc + val[2] }
[ (grouping.key) , [ (grouping.value) : prices ] ]
}.sort { left, right ->
right[0] <=> left[0]
}.collect {
[(it[0]) : it[1] ]
}
  • 第一个groupBy 完全正如你所说,它按市场名称和商品名称分组
  • collect创建所需的结构,不包括最终的 k:v协会:
    • grouping是键映射拆分中的唯一条目,以便可以将其重新排序为所需的形式
    • prices是用非常方便的 inject 完成的这相当于 Groovy 中的 fold left使用函数式语言进行操作
  • sort用于翻转您指定的顺序 - 必须询问实际逻辑是什么,因此您可能想要替换它
  • 最后collect进行最终的 map 分配以获得确切想要的形式

是的,它有点密集和神奇,但你总是可以将闭包移动到具有适当的描述性名称的 defs 中。

关于groovy - 如何使用groovy对列表列表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19332248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com