2013-01-17 65 views

回答

25

注意

list.flatten 

会做一样好。

6

是的,你可以使用collect为:

list.collect { case Some(x) => x } 

collect需要PartialFunction[A,B]这个功能适用于在其上定义,并放弃其余的所有元素。

编辑

由于gpampara正确提到的,对于这种情况下flatten就足够了。 collect如果有其他约束和/或转换,将是正确的工具。

+0

谢谢。你可以依靠斯卡拉总是有一个更优雅的方式;-) – deamon

+2

一个更优雅的方式很简单:'list.flatten' – gpampara

+0

@gpampara谢谢,你证明我是正确的:-) – deamon

4

您还可以使用:

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/

+0

是的,它的工作原理。但我不明白为什么。根据文档'flatMap'必须返回'Option'。 – deamon

+1

http://www.brunton-spall.co.uk/post/2011/12/02/map-map-and-flatmap-in-scala/这里是很好的解释 – Arg

+0

我的错误是看'flatMap'上'Option'类,但我当然必须查看'List.flatMap'。 – deamon

相关问题