【问题标题】:How to extract a new list from an object field in Groovy如何从 Groovy 中的对象字段中提取新列表
【发布时间】:2012-06-24 21:03:47
【问题描述】:

在 Groovy 中,如何从以下内容中提取新列表:

   def people = [ 
           new Person(name:"Tom", yearOfBirth:1985),
           new Person(name:"Abigail", yearOfBirth:1987),
           new Person(name:"Joyce", yearOfBirth:1984),
           new Person(name:"James", yearOfBirth:1987),
           new Person(name:"Scott", yearOfBirth:1985),
           new Person(name:"Ruth", yearOfBirth:1984)
       ]  

   class Person {
       String name
       int yearOfBirth
   }

使新列表如下所示:

 ["Tom", "Abigail", "Joyce", "James", "Scott", "Ruth"]    

【问题讨论】:

    标签: groovy


    【解决方案1】:

    你可以这样做:

    def names = people.name
    

    【讨论】:

    • 完美,在此过程中如何将“Tom”替换为“Tim”?
    • 你需要像people.collect { it.name == 'Tom' ? 'Tim' : it.name }这样的东西
    • @tim_yates 你有什么理由喜欢这个而不是def names = people*.name?我个人更喜欢后者。 (顺便说一句,我觉得 Reimeus 想用你代替 Tom 很有趣 =P)
    • @epidemian 假设人们是一个列表,它们最终都是同一件事...查看我的代码,我同时使用了这两个:-/我喜欢*.,因为它表达了你在做什么更多,但. 打字更少 ;-) 我们替换了 Tom 是件好事,他没有减轻体重 ;-)
    • @tim_yates 好吧,在这种情况下,我觉得两种语法都可以,因为这是一个非常简单的示例。但总的来说,我更喜欢*.prop,因为我觉得它的含义更明显;它总是表示.collect { it.prop }people.name 选项依赖于 people 对象(propertyMissing 实现,并且它没有 name 属性)的相当多的魔法,我最好不想每次看到那个表达式时都记住它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2013-05-31
    • 1970-01-01
    相关资源
    最近更新 更多