如果我List[Option[A]]
在 Scala 中有一个,那么过滤掉这些None
值的惯用方法是什么?
一种方法是使用以下方法:
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
有没有更“惯用”的方式?这看起来很简单。
如果您想同时摆脱这些选项,可以使用flatten
:
scala> someList.flatten
res0: List[String] = List(Hello, Goodbye)
someList.filter(_.isDefined)
如果你想保持结果类型为List[Option[A]]
图书馆cats
也有flattenOption
,它把 anyF[Option[A]]
变成 a F[A]
(哪里F[_]
是 a FunctorFilter
)
import cats.implicits._
List(Some(1), Some(2), None).flattenOption == List(1, 2)