要映射的groovy列表

要映射的groovy列表,groovy,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]] 我开始在列表中执行每个操作。each并添加一个新参数,但没有

如何将此列表转换为地图

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]]
我开始在列表中执行每个操作。each并添加一个新参数,但没有成功

您正在查找groupBy和collectEntries。groupBy通过闭包创建一个映射,该闭包返回用于收集中具有相同密钥的所有项目的密钥。然后,collectEntries通过从该闭包返回键和值作为列表来构建映射。由于groupby映射保存所有原始列表项,因此我们使用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]]]

这与grails无关,是groovy:只给我一个中心,有两个