【问题标题】:Grails findAll and GroupByGrails findAll 和 GroupBy
【发布时间】:2020-05-01 07:32:45
【问题描述】:

我有一个包含 3 个字段的域类:姓名、年龄和城市。我想找到所有对年龄和城市有限制的人。到目前为止,这是我的代码:

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]]]

上下文:我想按字段从域类中提取对象并显示两个将这些列表发送到视图。

【问题讨论】:

    标签: grails groovy group-by findall


    【解决方案1】:

    这是因为该值是一个列表,而[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] }]} 
    

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      相关资源
      最近更新 更多