2016-11-23 12 views
1

問題は、Optionの使用法を正しく理解しているかどうかを確認することです。collect vs collectFirst - 戻り値が異なる型の理由 - Scala

私は、collectFirstがOptionを返している間に、collectメソッドがListを返すことに気付きました。これは、collectは複数の値を返すことも、何も返さないこと(空のリストで表されることもありません)です。一方、collectFirstは、単一の値(あるいはNothing)を返しますので、それは我々が「リスト」を返すことはありませんとしてオプションを使用する方になります

+0

は厳密に言えば、収集しません複数の値を返すか、何も返しませんが、単一の値は複数の値を含むコレクションか空のコレクションのいずれかになります。しかし、あなたはまだどちらの場合でも何かを持っています。 –

+0

あなたはその考えを持っていると思います。 Optionは、最大サイズが1のコレクションと考えることもできます。 Optionはそれにもある多くの操作をサポートしています(例えば 'map()'、 'foreach()'など)。この考え方では、2つの戻り値の型はそれほど違いはありません。どちらもコレクションであり、一方はサイズが制限されています。 – 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 
関連する問題