2016-11-23 161 views
1

問題是確認我是否正確理解了Option的使用。collect vs collectFirst - 爲什麼返回值是不同類型的 - Scala

我注意到方法collect返回一個List,而collectFirst返回一個Option。是否因爲collect可以返回多個值或沒有值(沒有一個由空列表表示)。 collectFirst在另一方面返回一個值(或沒有),因此它更有用一種選擇,因爲我們將永遠不會返回一個「清單」

+0

嚴格地說,收集不返回多個值或沒有值,而是一個值,它恰好是包含多個值的集合,或者是一個空集合。但在這兩種情況下你仍然有一些東西。 –

+0

我想你明白了。將Option作爲有時最大大小爲1的集合也是有意義的。選項支持許多你會發現的操作(例如'map()','foreach()',..)。有了這種思路,兩種返回類型就沒有什麼不同了 - 兩種都是集合,一種只是大小有限,另一種則不是。 – alextsc

+0

有點......有點...是的!咄! – Dima

回答

3

你是對的:

scala> (1 to 5).collect { case i if i % 2 == 0 => "*" * i } 
res: scala.collection.immutable.IndexedSeq[String] = Vector(**, ****) 

scala> (1 to 5).collectFirst { case i if i % 2 == 0 => "*" * i } 
res: Option[String] = Some(**) 

scala> (1 to 5).collect { case i if i > 10 == 0 => "*" * i } 
res: scala.collection.immutable.IndexedSeq[String] = Vector() 

scala> (1 to 5).collectFirst { case i if i > 10 == 0 => "*" * i } 
res: Option[String] = None 
相關問題