在Groovy中使用groupBy
我有一个用户列表在Groovy中使用groupBy,groovy,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} 我得到: [托尼:[[姓名:托尼,年龄:4],[姓名:托尼,年龄:5],[姓名:艾伦,年龄:16]] 所以还
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}
我得到:
[托尼:[[姓名:托尼,年龄:4],[姓名:托尼,年龄:5],[姓名:艾伦,年龄:16]]
所以还有一点工作要做,以得到我想要的。有什么建议吗?试试:
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]]
尝试:
您也可以在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
}
def items=[[姓名:“托尼”,年龄:4],[姓名:“托尼”,年龄:5],[姓名:“艾伦”,年龄:16]]
def groupped=items.inject([:].withDefault{[]}){res,curr->
res[curr.name]您也可以在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
}
def items=[[姓名:“托尼”,年龄:4],[姓名:“托尼”,年龄:5],[姓名:“艾伦”,年龄:16]]
def groupped=items.inject([:].withDefault{[]}){res,curr->
res[curr.name]重复。重复。