我有一个列表,我想按市场名称和商品名称分组,按列出价格:
例如[“Terra”,“Wheat”,1000.0] – “Terra”是市场名称,“Wheat”是商品名称,1000.0是价格
例如[“Terra”,“Wheat”,1000.0] – “Terra”是市场名称,“Wheat”是商品名称,1000.0是价格
def marketcommodityGroup = [ ["Merkato","Wheat",1000.0],["Shola",1875.0],["Merkato","Barley",5000.0],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] ] }
> first groupBy正是你所说的,它按市场名称和商品名称分组
> collect创建所需结构,不包括最终的k:v关联:
>分组是键映射拆分中的唯一条目,以便可以将其重新排序为所需的形式
>价格是通过非常方便的注入完成的,这是Groovy相当于功能语言中的折叠左操作
> sort用于按指定方式翻转顺序 – 必须询问实际逻辑是什么,以便您可能想要替换它
>最后一次收集做最后的地图分配,以获得确切的通缉表格
是的,它有点密集和神奇,但你总是可以用正确的描述性名称将闭包移动到defs.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。