如果我在Scala中有List[Option[A]]
,过滤掉None
值的惯用方法是什么?
一种方法是使用以下内容:
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
是否有更“惯用”的方式?这看起来很简单。
答案 0 :(得分:149)
如果您想同时删除这些选项,可以使用flatten
:
scala> someList.flatten
res0: List[String] = List(Hello, Goodbye)
答案 1 :(得分:16)
someList.filter(_.isDefined)
,请 List[Option[A]]
答案 2 :(得分:2)
cats
库也有flattenOption
,可将F[Option[A]]
变为F[A]
(其中F[_]
为FunctorFilter
)
import cats.implicits._
List(Some(1), Some(2), None).flattenOption == List(1, 2)