You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala 从嵌套case class提取(category,rating)生成目标Map的实现方法

Scala 嵌套结构提取生成Map的优雅实现

核心实现代码

利用Scala for推导式对Option类型的自动空过滤特性,即可简洁完成需求,无空值风险:

val result: Map[String, String] = (for {
  cls <- myVal
  subject <- cls.subjects
  category <- subject.category
  rating <- subject.rating
} yield category -> rating).toMap

代码说明

  • for推导式中针对Option类型的<-操作会自动跳过None值的条目,天然满足「category或rating任意为None则忽略」的要求,无需手动判空
  • 完全规避了你原有实现中调用.get可能抛出的NoSuchElementException异常,安全性更高
  • 最终直接将收集到的(category, rating)二元组序列转换为Map,和你要求的输出格式完全匹配

你给出的示例输入运行上述代码后,输出结果和预期一致:

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

等效函数链写法

如果更习惯链式调用的写法,也可以用flatMap实现,效果完全相同:

val result: Map[String, String] = myVal
  .flatMap(_.subjects)
  .flatMap(sub => sub.category.flatMap(c => sub.rating.map(r => c -> r)))
  .toMap

内容的提问来源于stack exchange,提问作者CoolGoose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:30:03