2014-09-16 4 views
0

У меня есть список пользователей, какИспользование GroupBy в Groovy

def items = [[name:"tony", age:4], [name:"tony", age: 5], [name:"alan", age:16]] 

Я хочу, чтобы сгруппировать их по имени, но лишь хочу возраст в списке, так что я хочу

["tony": [4, 5], "alan": [16]] 

Когда я

def groups = items.groupBy {it.name} 

я получаю: [TONY: [[имя: TONY, возраст: 4], [имя: TONY, возраст: 5]], алан: [[имя: алан, возраст: 16]]]

Так что еще немного работы, чтобы получить то, что я хочу. Какие-нибудь советы?

+0

дубликата. https://stackoverflow.com/questions/25794341/index-a-list-of-groovyrowresult-into-a-map – dmahapatro

ответ

2

Try:

def items = [[name:"tony", age:4], [name:"tony", age: 5], [name:"alan", age:16]] 
def t = items.groupBy { it.name }.collectEntries { [(it.key):(it.value*.age)] } 
assert t == ['tony':[4,5],'alan':[16]] 
3

вы также можете это сделать в 1 петлю вместо 2:

def items = [[name:"tony", age:4], [name:"tony", age: 5], [name:"alan", age:16]] 
def groupped = items.inject([:].withDefault{ [] }){ res, curr -> 
    res[ curr.name ] << curr.age 
    res 
} 
+0

+1 Ударьте меня к ней за секунды :). – helpermethod

Смежные вопросы