首页 > 解决方案 > 从嵌套案例类中提取地图

问题描述

我有一个已读入嵌套案例类的 json 值。从这里我需要一个(类别,评级)的scala地图。请帮忙。

预期输出:

Map("MTH1"-> "9A","MTH2"-> "9B","SCI1" -> "8A")

注意:如果任何值为 none,则应将其省略。

需要一些优雅而聪明的方法将值转换为 scala Map

 val myVal: List[myClass] = List(myClass("Tim", "100", Some("hills"),
    List(subject("geometry", Some("MTH1"), Some("9A")),
      subject("trigonometry", Some("MTH2"), Some("9B")),
      subject("physics", Some("SCI1"), Some("8A"))
    )))


  case class myClass(
                      name: String,
                      classId: String,
                      teacher: Option[String],
                      subjects: List[subject]
                    )


  case class subject(
                      name: String,
                      category: Option[String],
                      rating: Option[String]
                    )

  myVal.foreach(i =>
    (
      i.subjects.foreach(
        j => println(j.category.get, j.rating.get)
      )))

标签: scala

解决方案


将返回一个List[Map[String,String]]

myVal.map(_.subjects
           .collect{
             case subject(_,Some(cat),Some(rat)) => cat -> rat
           }.toMap)

原始的每个元素List都变成了一个Mapof category -> rating(key -> value) 对。


推荐阅读