scala - 从嵌套案例类中提取地图
问题描述
我有一个已读入嵌套案例类的 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)
)))
解决方案
将返回一个List[Map[String,String]]
:
myVal.map(_.subjects
.collect{
case subject(_,Some(cat),Some(rat)) => cat -> rat
}.toMap)
原始的每个元素List
都变成了一个Map
of category -> rating
(key -> value) 对。
推荐阅读
- javascript - 使路由对一个 ejs 文件唯一
- json - Gson toJson 转义选项字段
- ruby - 警告:以前的变量定义在这里 - Ruby
- file - 将大量少量数据写入文件(如日志记录)
- linux - 使用 auth_to_local 将登录名转换为 Kerberos 主体名称
- c# - 在 Unity C# 中重置自己后如何让计时器继续运行
- variables - docker-compose 命令中的变量替换
- matrix - 使用 malloc 的矩阵乘法,无需用户输入
- javascript - 如何测试使用 Jest 抛出的异常
- clojure - 在 Clojure 中,您可以将项目添加到倒数第二个列表中吗?