从Scala中的列表[选项]中获取具有值的所有条目
是否可以获取具有值的从Scala中的列表[选项]中获取具有值的所有条目,scala,collections,functional-programming,Scala,Collections,Functional Programming,是否可以获取具有值的列表[选项[T]的所有条目 例如: val list = List(None, Some(1), None, Some(2)) list.filter(_.isDefined).map(_.get) 结果: List[Int] = List(1, 2) 有没有一种方法可以一步完成?这是一种常见的情况,不是吗?是的,您可以使用collect: list.collect { case Some(x) => x } collect接受一个PartialFunction
列表[选项[T]
的所有条目
例如:
val list = List(None, Some(1), None, Some(2))
list.filter(_.isDefined).map(_.get)
结果:
List[Int] = List(1, 2)
有没有一种方法可以一步完成?这是一种常见的情况,不是吗?是的,您可以使用
collect
:
list.collect { case Some(x) => x }
collect
接受一个PartialFunction[a,B]
并将此函数应用于定义它的所有元素,并丢弃其余元素
编辑:
正如gpampara正确提到的,对于这种情况,flatte
就足够了<如果存在其他约束和/或转换,则代码>收集将是正确的工具。您还可以使用:
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)
有关如何/为什么这样做的解释,您可以查看本文:注意
list.flatten
也可以。谢谢。您可以相信Scala总是有一种更优雅的方式;-)一个更优雅的方法是:
list.flatte
是的,它可以工作。但我不明白为什么。根据文档flatMap
必须返回选项
。下面是一个很好的解释我的错误是在选项
类中查看flatMap
,但当然我必须查看List.flatMap
。