118

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

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

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

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

4

3 回答 3

179

如果您想同时摆脱这些选项,可以使用flatten

scala> someList.flatten
res0: List[String] = List(Hello, Goodbye)
于 2012-04-11T10:59:51.277 回答
21

someList.filter(_.isDefined)如果你想保持结果类型为List[Option[A]]

于 2015-04-07T15:53:10.857 回答
5

图书馆cats也有flattenOption,它把 anyF[Option[A]]变成 a F[A](哪里F[_]是 a FunctorFilter

import cats.implicits._

List(Some(1), Some(2), None).flattenOption == List(1, 2)
于 2018-03-27T11:26:44.080 回答