Si tengo un List[Option[A]]
en Scala, ¿cuál es la forma idiomática de filtrar los None
valores?
Una forma es utilizar lo siguiente:
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
¿Existe una forma más "idiomática"? Esto parece bastante simple.
Respuestas:
Si desea deshacerse de las opciones al mismo tiempo, puede usar
flatten
:fuente
flatMap
se puede usar para procesar los elementos de la lista distintos deNone
s, similar asomeList.flatten.map
, ya que a menudo se quiere trabajar con estos elementos y no solo conflatten
la lista por diversión.Option
objetos, pero otras veces necesito que permanezcan comoOption[A]
. Cada vez encuentro más usos para estaOption[A]
característica interesante.someList.filter(_.isDefined)
si desea mantener el tipo de resultado comoList[Option[A]]
fuente
La
cats
biblioteca también tieneflattenOption
, que convierte anyF[Option[A]]
en unF[A]
(dondeF[_]
es unFunctorFilter
)fuente