After yesterday’s Scala nested Option + flatMap/for example, here’s another example of plowing through nested Options with flatMap
. First, start with some nested options:
val o1 = Option(1) val oo1 = Option(o1) val ooo1 = Option(oo1)
Here are those same three lines, with the data type for each instance shown in the comments:
val o1 = Option(1) // Option[Int] val oo1 = Option(o1) // Option[Option[Int]] val ooo1 = Option(oo1) // Option[Option[Option[Int]]]
With this setup, just like yesterday, I can dig my way through the Options to get to the enclosed value using flatMap
calls:
ooo1 flatMap { oo1 => oo1 flatMap { o1 => o1 } }
Here’s what that code looks like in the Scala REPL:
scala> val o1 = Option(1) o1: Option[Int] = Some(1) scala> val oo1 = Option(o1) oo1: Option[Option[Int]] = Some(Some(1)) scala> val ooo1 = Option(oo1) ooo1: Option[Option[Option[Int]]] = Some(Some(Some(1))) scala> ooo1 flatMap { oo1 => | oo1 flatMap { o1 => | o1 | } | } res0: Option[Int] = Some(1)
As that shows, the final result of the flatMap
calls is an Option[Int]
, specifically a Some(1)
.
Just like yesterday, you can also use for-expressions to get to the enclosed value, but for today I just wanted to show this as another flatMap
example.
I’ll keep trying to make monads, flatMap
, and for-expressions as easy as I can, but for now I hope that’s a simple example you can experiment. (At least the setup portion of it is simple.)