none - scala option get
Cómo filtrar ninguno fuera de la lista[Opción]? (3)
Si tengo una List[Option[A]]
en Scala, ¿cuál es la forma idiomática de filtrar los valores None
?
Una forma es usar lo siguiente:
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
¿Hay una manera más "idiomática"? Esto parece bastante simple.
La biblioteca de cats
también tiene flattenOption
, que convierte cualquier F[Option[A]]
en una F[A]
(donde F[_]
es un FunctorFilter
)
import cats.implicits._
List(Some(1), Some(2), None).flattenOption == List(1, 2)
A partir de los cats
1.0, esta función se movió a FunctorEmpty
en la biblioteca cats-mtl-core
, por lo que necesitarás:
import cats.mtl.implicits._
Si quiere deshacerse de las opciones al mismo tiempo, puede usar flatten
:
scala> someList.flatten
res0: List[String] = List(Hello, Goodbye)
someList.filter(_.isDefined)
si desea mantener el tipo de resultado como List[Option[A]]