Si j'ai un List[Option[A]]
dans Scala, quelle est la manière idiomatique de filtrer les None
valeurs?
Une façon consiste à utiliser ce qui suit:
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
Y a-t-il une manière plus «idiomatique»? Cela semble assez simple.
Réponses:
Si vous souhaitez vous débarrasser des options en même temps, vous pouvez utiliser
flatten
:la source
flatMap
peut être utilisé pour traiter les éléments de liste autres queNone
s, similaire àsomeList.flatten.map
, car on veut souvent travailler avec ces éléments et pas seulementflatten
la liste par amusement.Option
objets, mais d'autres fois, j'ai besoin qu'ils restent commeOption[A]
. Je trouve de plus en plus d'utilisations pourOption[A]
- fonctionnalité intéressante.someList.filter(_.isDefined)
si vous souhaitez conserver le type de résultat commeList[Option[A]]
la source
La
cats
bibliothèque a égalementflattenOption
, qui transforme toutF[Option[A]]
en unF[A]
(oùF[_]
est aFunctorFilter
)la source