【问题标题】:Collect closure in groovy在 groovy 中收集闭包
【发布时间】:2013-11-24 21:07:44
【问题描述】:

我是函数式编程范式的新手,希望使用 groovy 来学习这些概念。我有一个 json 文本,其中包含几个人员对象的列表,如下所示:

{
  "persons":[
   {
     "id":1234,
     "lastname":"Smith",
     "firstname":"John"
   },
   {
     "id":1235,
     "lastname":"Lee",
     "firstname":"Tommy"
   }
  ]
}

我正在尝试将它们存储在 Person groovy 类的列表或数组中,如下所示:

class Person {
    def id
    String lastname
    String firstname
}

我想使用闭包来做到这一点。我试过类似的东西:

def personsListJson= new JsonSlurper().parseText(personJsonText) //personJsonText is raw json string
persons = personsListJson.collect{
   new Person(
       id:it.id, firstname:it.firstname, lastname:it.lastname)
}

这不起作用。收集操作是否应该以这种方式运行?如果是,那我该怎么写呢?

【问题讨论】:

    标签: groovy functional-programming mapreduce collect


    【解决方案1】:

    试试

     personsListJson.persons.collect {
         new Person( id:it.id, firstname:it.firstname, lastname:it.lastname )
     }
    

    由于 json 和构造函数参数之间存在 1:1 映射,您可以将其简化为:

     personsListJson.persons.collect {
         new Person( it )
     }
    

    但我会保留第一种方法,就好像 Json 在其中有一个额外的值(可能超出您的控制)然后第二种方法会中断

    【讨论】:

    • 对不起,我是愚蠢的。在发布问题之前应该仔细看看。非常感谢您的帮助。
    • @Lee 不用担心!很高兴我能帮忙:-)
    【解决方案2】:

    你可以试试-

    List<JSON> personsListJson = JSON.parse(personJsonText);
    persons = personsListJson.collect{
        new Person(id:it.id, firstname:it.firstname, lastname:it.lastname)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 2012-03-31
      • 2015-07-26
      相关资源
      最近更新 更多