我們來看看簽名flatMap。
def flatMap[B](f: (Int) ⇒ GenTraversableOnce[B]): TraversableOnce[B]
和map
def map[B](f: (A) ⇒ B): IndexedSeq[B]
你可以看到的f
的結果類型必須爲GenTraversableOnce[B]
的flatMap
簽名。 ,但f
的結果類型map
沒有限制。
結果類型println(x)
是Unit
,結果類型x+2
是Int
。由於兩者都不執行GenTraversableOnce[B]
,因此您不能執行flatMap(x=>println(x))
和flatMap(x=>x+2)
。
在另一方面Some(i)
和None
具有Option[Int]
類型,其可以被隱式轉換爲Iterable[Int]
source
的Iterable簽名是
trait Iterable[+A] extends Traversable[A]
和Traversable是
trait Traversable[+A] .. with TraversableOnce[A]`
最後是TraversableOnce是
trait TraversableOnce[+A] extends GenTraversableOnce[A]
因此Option[Int]
實現GenTraversableOnce[Int]
所以可以使用它作爲flatMap[Int]
[地圖與FlatMap上字符串](https://stackoverflow.com/questions/19209519/map-versus-flatmap結果-on-string)回答你的問題 – prayagupd
這與https://stackoverflow.com/questions/42997900/apache-spark-comparison-of-map-vs-flatmap-vs-mappartitions-vs-mappartitionswith –