Say I have a val s: Option[Option[String]]. It can thus have the following values:
Some(Some("foo")) Some(None) None
I want to reduce it so that the first becomes Some("foo") while the two others become None. Obviously there are many ways to accomplish this, but I'm looking for a simple, perhaps built-in, less-than-one-liner.
It's a shame that flatten doesn't exist. It should.
Flatten does exist now.
As before,
s getOrElse None (in addition to the other answers) will also do the same thing.
You could use scalaz join to do this, as this is one of the monadic operations:
doubleOpt.join Here it is in the REPL:
scala> import scalaz._; import Scalaz._ import scalaz._ import Scalaz._ scala> some(some("X")).join res0: Option[java.lang.String] = Some(X) scala> some(none[String]).join res1: Option[String] = None scala> none[Option[String]].join res3: Option[String] = None It's available to anything with a typeclass instance for a Monad.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With