Se eu tiver um List[Option[A]]
no Scala, qual é a maneira idiomática de filtrar os None
valores?
Uma maneira é usar o seguinte:
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
Existe uma maneira mais "idiomática"? Isso parece muito simples.
Respostas:
Se você quiser se livrar das opções ao mesmo tempo, pode usar
flatten
:fonte
flatMap
pode ser usado para processar os elementos da lista diferentes deNone
s, semelhante asomeList.flatten.map
, já que muitas vezes se deseja trabalhar com esses elementos e não apenas comflatten
a lista por diversão.Option
objetos, mas outras vezes preciso que eles permaneçam comoOption[A]
. Estou descobrindo mais e mais usos paraOption[A]
- recurso legal.someList.filter(_.isDefined)
se você quiser manter o tipo de resultado comoList[Option[A]]
fonte
A
cats
biblioteca também temflattenOption
, o que transforma qualquerF[Option[A]]
um emF[A]
(ondeF[_]
é umFunctorFilter
)fonte