Grails findAll 和 GroupBy
Grails findAll and GroupBy
我有一个包含 3 个字段的域 class:姓名、年龄和城市。我想找到所有对年龄和按城市分组的限制。到目前为止,这是我的代码:
import groovy.transform.*
@Canonical
class Person{
String name
int age
String city
}
List<Person> list = [
new Person('Jey', 42, 'New'),
new Person('Leo', 25, 'New'),
new Person('Dan', 29, 'New'),
new Person('Alex', 36, 'Fran'),
new Person('Doe', 34, 'Lon'),
new Person('Tim', 34, 'Lon'),
new Person('Jin', 34, 'Lon'),
new Person('Bob', 34, 'Par'),
new Person('Ken', 37, 'Par'),
]
groupByCity = list.findAll{it.age < 36}.groupBy{it.city}.collectEntries{key, value -> [(key): [value.age, value.name]]}
println groupByCity
我需要的是:
[New:[[25,Leo], [29, Dan]], Lon:[[34, Doe], [34, Tim]..
或
[New:[[25:Leo], [29: Dan]], Lon:[[34: Doe], [34: Tim]..
但我得到了
[New:[[25, 29], [Leo, Dan]], Lon:[[34, 34, 34], [Doe, Tim, Jin]], Par:[[34], [Bob]]]
上下文:我想从域 class 中按字段分组提取对象,并显示两个将这些列表发送到视图。
这是因为该值是一个列表,[value.age, value.name]
导致 [[25, 29], [Leo, Dan]] ..
。
添加收集调用以提取所需的结果 -
list
.findAll{it.age < 36}
.groupBy{it.city}
.collectEntries{key, value -> [(key): value.collect{ [it.age, it.name] }]}
我有一个包含 3 个字段的域 class:姓名、年龄和城市。我想找到所有对年龄和按城市分组的限制。到目前为止,这是我的代码:
import groovy.transform.*
@Canonical
class Person{
String name
int age
String city
}
List<Person> list = [
new Person('Jey', 42, 'New'),
new Person('Leo', 25, 'New'),
new Person('Dan', 29, 'New'),
new Person('Alex', 36, 'Fran'),
new Person('Doe', 34, 'Lon'),
new Person('Tim', 34, 'Lon'),
new Person('Jin', 34, 'Lon'),
new Person('Bob', 34, 'Par'),
new Person('Ken', 37, 'Par'),
]
groupByCity = list.findAll{it.age < 36}.groupBy{it.city}.collectEntries{key, value -> [(key): [value.age, value.name]]}
println groupByCity
我需要的是:
[New:[[25,Leo], [29, Dan]], Lon:[[34, Doe], [34, Tim]..
或
[New:[[25:Leo], [29: Dan]], Lon:[[34: Doe], [34: Tim]..
但我得到了
[New:[[25, 29], [Leo, Dan]], Lon:[[34, 34, 34], [Doe, Tim, Jin]], Par:[[34], [Bob]]]
上下文:我想从域 class 中按字段分组提取对象,并显示两个将这些列表发送到视图。
这是因为该值是一个列表,[value.age, value.name]
导致 [[25, 29], [Leo, Dan]] ..
。
添加收集调用以提取所需的结果 -
list
.findAll{it.age < 36}
.groupBy{it.city}
.collectEntries{key, value -> [(key): value.collect{ [it.age, it.name] }]}