groovy列表来映射

时间:2015-01-09 13:54:26

标签: groovy

如何将此列表转换为地图?

def list = [[10, STOREA, NORTH], [9, STOREB, CENTER], [11, STOREC, CENTER]]

喜欢:

def map = [['NORTH': ['STORE': 'STOREA', 'QTY': 10]],['CENTER': ['STORE': 'STOREB', 'QTY': 9],['STORE': 'STOREC', 'QTY': 11]]

我开始在list.each上执行每项操作并添加新参数,但我没有成功

1 个答案:

答案 0 :(得分:4)

您正在寻找groupBycollectEntriesgroupBy通过闭包创建一个映射,它返回用于收集具有相同键的所有项的键。然后collectEntries通过从该闭包返回键和值(作为列表)来构建映射。由于groupby-map包含所有原始列表项,我们collect将它们放入带有STORE / QTY键的新地图中。

def list = [[10, 'STOREA', 'NORTH'], [9, 'STOREB', 'CENTER'], [11, 'STOREC', 'CENTER']]

def map = list.groupBy{ it[2] }.collectEntries{
    [it.key, it.value.collect{ [STORE: it[1], QTY: it[0]] }]
}

println map.inspect()
//=> ['NORTH':[['STORE':'STOREA', 'QTY':10]], 'CENTER':[['STORE':'STOREB', 'QTY':9], ['STORE':'STOREC', 'QTY':11]]]