collect vs collectFirst - 为什么返回值是不同类型的 - Scala

时间:2016-11-23 20:21:48

标签: scala

问题是确认我是否正确理解了选项的使用。

我注意到方法collect返回List,而collectFirst返回一个Option。是因为collect可以返回多个值或者没有(没有一个由空列表表示)。另一方面,collectFirst返回单个值(或者什么都没有),因此我们将永远不会返回“列表”,因此它会更多地使用选项

1 个答案:

答案 0 :(得分:8)

你是对的:

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