Comment filtrer Aucun n’est hors liste ?

Si j’ai une List[Option[A]] dans Scala, quel est le moyen idiomatique de filtrer les valeurs None ?

Une façon consiste à utiliser les éléments suivants:

 val someList: List[Option[Ssortingng]] = List(Some("Hello"), None, Some("Goodbye")) someList.filter(_ != None) 

Y a-t-il une manière plus “idiomatique”? Cela semble assez simple.

Si vous souhaitez vous débarrasser des options en même temps, vous pouvez utiliser flatten :

 scala> someList.flatten res0: List[Ssortingng] = List(Hello, Goodbye) 

someList.filter(_.isDefined) si vous souhaitez conserver le type de résultat sous la forme List[Option[A]]

La bibliothèque de cats a également flattenOption , qui transforme tout F[Option[A]] en F[A] (où F[_] est un FunctorFilter )

 import cats.implicits._ List(Some(1), Some(2), None).flattenOption == List(1, 2) 

A partir de cats 1.0, cette fonction a été déplacée vers FunctorEmpty dans la bibliothèque cats-mtl-core . Vous aurez donc besoin de:

 import cats.mtl.implicits._