Как отфильтровать 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)по состоянию на
cats1.0, эта функция была перенесена наFunctorEmptyнаcats-mtl-coreбиблиотека, так что вам понадобится:import cats.mtl.implicits._