2015-01-09 5 views
2

Как я могу преобразовать этот список в карту?groovy список to map

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 и добавить новый параметр, но я не имел успеха

+0

Это не о 'grails', является' groovy' :) – Victor

ответ

4

Вы ищете groupBy и collectEntries. groupBy создает карту закрытием, которая возвращает ключ для сбора всех элементов с одним и тем же ключом. Затем collectEntries строит карту, возвращая ключ и значение (в виде списка) из этого закрытия. И поскольку групповая карта содержит все исходные элементы списка, мы получаем 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]]] 
+0

только дает мне один центр, Theres два – fsi

+0

@fsi обновленный ответ. также нужна группаBy – cfrick