确实的Scala具有转换一个序号[选项[T]]于Seq [T]的API方法?

ssa*_*anj 29 scala option

是否有Scala API方法来转换Seq[Option[T]] -> Seq[T]

您可以通过以下方式手动完成:

seq.filter(_.isDefined).map(_.get)
Run Code Online (Sandbox Code Playgroud)

想知道是否有一种方法可以在通用API中执行上述操作.

Ran*_*ulz 48

绝对,积极的不是.(不!)

scala> val so1 = List(Some(1), None, Some(2), None, Some(3))
so1: List[Option[Int]] = List(Some(1), None, Some(2), None, Some(3))

scala> so1.flatten
res0: List[Int] = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

  • 不那么令人惊讶,因为`flatMap(fun)`==`map(fun).flatten`. (10认同)
  • 你所说的“绝对,绝对不是。(不是!)”是什么意思?你的代码没有演示这个工作吗? (4认同)
  • 令人惊讶的是,so1.flapMap(r => r)也有效.这似乎是由于Option可以转换为可迭代的事实:implicit def option2Iterable [A](xo:Option [A]):Iterable [A] = xo.toList.当仅调用xo.toList时,Some(X)生成列表值.None给出List().Flatmap完成剩下的工作. (2认同)