是否可以获得List[Option[T]]
具有值的所有条目?
例子:
val list = List(None, Some(1), None, Some(2))
list.filter(_.isDefined).map(_.get)
结果:
List[Int] = List(1, 2)
有没有一种方法可以一步完成?这是一个常见的情况,不是吗?
是否可以获得List[Option[T]]
具有值的所有条目?
例子:
val list = List(None, Some(1), None, Some(2))
list.filter(_.isDefined).map(_.get)
结果:
List[Int] = List(1, 2)
有没有一种方法可以一步完成?这是一个常见的情况,不是吗?
注意
list.flatten
也会这样做。
是的,您可以使用collect
:
list.collect { case Some(x) => x }
collect
接受 aPartialFunction[A,B]
并将此函数应用于定义它的所有元素并丢弃其余元素。
编辑:
正如 gpampara 正确提到的那样,对于这种情况flatten
就足够了。collect
如果有额外的限制和/或转换,将是正确的工具。
您还可以使用:
list.flatMap( x => x)
scala> val a = List(None, Some(1), None, Some(2))
a: List[Option[Int]] = List(None, Some(1), None, Some(2))
scala> a.flatMap(x => x)
res0: List[Int] = List(1, 2)
有关如何/为什么这样做的解释,您可以查看这篇文章:http ://www.brunton-spall.co.uk/post/2011/12/02/map-map-and-flatmap-in-scala/