【问题标题】:Regarding FoldLeft with list and map in scala关于FoldLeft与scala中的列表和地图
【发布时间】:2014-11-18 22:50:07
【问题描述】:

我有一个字符串列表作为 json 消息,我需要使用 json4s 从 json 写入对象。解析后,我需要将对象和对象属性作为键存储在 Map 中。 使用 var 方法我可以做到这一点。但我不想使用 var 并且想使用 foldLeft 来做同样的事情。

类定义:

case class Definition
{
   name:String,
   status:String
}

示例 json:

{"name":"test",
"status":"Enabled"
}

使用 json4s read api 我得到的对象如下。

Definition(test,Enabled)

我会得到像上面这样的点亮对象。从这个列表中,我需要创建一个地图,并且需要将 object.name 存储为键,将对象存储为值。

寻找优化的方法。

【问题讨论】:

    标签: scala


    【解决方案1】:
    // define case class
    case class Definition(name: String, status: String)
    
    // read objects from json
    // i use test data to simplify example
    val list = List(
      Definition("name1", "status1"),
      Definition("name2", "status2"),
      Definition("name3", "status3")
    )
    
    // transform list to map
    list.map(d => d.name -> d).toMap  
    

    要从 json 转换,您可以使用:

    val objectList = definitionList
      .foldLeft(List.empty[Definition])((listObject,result) => listObject :+ read[Definition](result))
    

    或:

    definitionList.map(read[Definition])
    

    【讨论】:

    • 元组的第二个元素应该是d,而不是d.status
    • 我被 json4s 的读取 api 卡住以从 json 转换为对象。尝试使用 --> val objectList = definitionList.foldLeft(List.empty[Definition])((listObject,result) => listObject+(read[Definition](result))) 但遇到编译问题。基本上我正在将 json 字符串列表转换为定义对象列表
    • 我将 json 作为字符串并尝试使用 json4s 的读取 API 将该 json 转换为定义对象
    • @user1668653 更新了我的答案。
    • @SergeyLagutin 非常感谢。它正在工作。顺便说一句,你能解释一下 + 和 + 之间的区别吗:。
    猜你喜欢
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2012-08-02
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多