2016-11-23 164 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 
相关问题