Another Scala nested Option + flatMap example

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.)

Add new comment

The content of this field is kept private and will not be shown publicly.

Anonymous format

  • Allowed HTML tags: <em> <strong> <cite> <code> <ul type> <ol start type> <li> <pre>
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.