How to filter None's out of List[Option]?

ScalaOption

Scala Problem Overview


If I have a List[Option[A]] in Scala, what is the idiomatic way to filter out the None values?

One way is to use the following:

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

Is there a more "idiomatic" way? This does seem pretty simple.

Scala Solutions


Solution 1 - Scala

If you want to get rid of the options at the same time, you can use flatten:

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

Solution 2 - Scala

someList.filter(_.isDefined) if you want to keep the result type as List[Option[A]]

Solution 3 - Scala

The cats library also has flattenOption, which turns any F[Option[A]] into an F[A] (where F[_] is a FunctorFilter)

import cats.implicits._

List(Some(1), Some(2), None).flattenOption == List(1, 2)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRalphView Question on Stackoverflow
Solution 1 - ScalaNicolasView Answer on Stackoverflow
Solution 2 - ScalaKevin O'RiordanView Answer on Stackoverflow
Solution 3 - ScaladcastroView Answer on Stackoverflow