has - scala option get
Combinando 2 opciones en 1 (3)
¿Existe una función predefinida x en Scala que combine 2 opciones para que
Some(a) x None => Some(a)
None x Some(b) => Some(b)
None x None => None
En los comentarios de la pregunta, usted menciona que no puede tener Some(a)
y Some(b)
, por lo que lo que realmente tiene es la Option[Either[Int,Int]]
. En ese caso, puede usar x.map(_.merge)
para volver a la Option[Int]
, por ejemplo
scala> val x:Option[Either[Int,Int]] = Some(Left(2))
x: Option[Either[Int,Int]] = Some(Left(2))
scala> x.map(_.merge)
res0: Option[Int] = Some(2)
No es difícil hacerlo a mano:
scala> val a = Some(1)
a: Some[Int] = Some(1)
scala> val b = Some(2)
b: Some[Int] = Some(2)
scala> Seq(a,b).flatten.headOption
res0: Option[Int] = Some(1)
Sí, este es el método orElse
. Elige el primer valor definido, o None
si no se define ninguno.
scala> Some(1) orElse None
res0: Option[Int] = Some(1)
scala> None orElse Some(1)
res1: Option[Int] = Some(1)
scala> None orElse None
res2: Option[Nothing] = None
scala> Some(1) orElse Some(2)
res3: Option[Int] = Some(1)