Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Scala中的列表[选项]中获取具有值的所有条目_Scala_Collections_Functional Programming - Fatal编程技术网

从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