关于FoldLeft与scala中的列表和地图

时间:2014-11-18 13:29:30

标签: scala

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

班级定义:

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

示例json:

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

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

Definition(test,Enabled)

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

寻找优化方法。

1 个答案:

答案 0 :(得分:2)

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