首页 > 解决方案 > 理解 scala 中的地图、平面图和选项

问题描述

在以下情况下,我试图了解如何在 scala 中使用函数式编程概念(map、flatmap、filter ..)。基本上我正在尝试过滤 Inner1id并在此处阅读valueout如果我有对对象的引用,请问如何阅读 v(value)

final case class Inner2(v:Option[String])
final case class Inner1(id: String,inner2: Seq[Inner2])
final case class Out(inner1: Option[Seq[Inner1]])
val inner2 = Inner2(Some("value"))
val inner11 = Inner1("id",List(inner2))
val inner12 = Inner1("id2",List())
val out = Out(Some(List(inner11,inner12)))

我知道下面的代码不正确,但我把它放在这里是为了说明要做什么。

out.inner1
  .flatMap(_.headOption)
  .filter(_.id=="id")
  .map(_.inner2)
  .flatMap(_.headOption)
  .flatMap(_.v)

标签: scala

解决方案


寻找这样的东西?

out.inner1
  .flatMap {
    _.withFilter(_.id == "id").flatMap {
      _.inner2.flatMap {
        _.v
      }
    }.headOption
  }
//println gives `Some(value)`

如果要提取 Option 值,.getOrElse("")最后可以使用


推荐阅读