如何过滤列表[选项]中的无?

时间:2012-04-11 10:56:22

标签: scala option

如果我在Scala中有List[Option[A]],过滤掉None值的惯用方法是什么?

一种方法是使用以下内容:

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

是否有更“惯用”的方式?这看起来很简单。

3 个答案:

答案 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)