Как отфильтровать None из списка[опция]?
Если у меня есть List[Option[A]]
в Scala, что такое идиоматические способ, чтобы отфильтровать None
значения?
один из способов заключается в использовании следующего:
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
есть ли более "идиоматический" способ? Это действительно кажется довольно простым.
3 ответа:
Если вы хотите избавиться от опций одновременно, вы можете использовать
flatten
:scala> someList.flatten res0: List[String] = List(Hello, Goodbye)
The
cats
библиотекеflattenOption
, которая превращает любойF[Option[A]]
наF[A]
(гдеF[_]
этоFunctorFilter
)import cats.implicits._ List(Some(1), Some(2), None).flattenOption == List(1, 2)
по состоянию на
cats
1.0, эта функция была перенесена наFunctorEmpty
наcats-mtl-core
библиотека, так что вам понадобится:import cats.mtl.implicits._