2013-01-17 62 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

相關問題