Lassen Sie uns die Signatur von flatMap sehen.
def flatMap[B](f: (Int) ⇒ GenTraversableOnce[B]): TraversableOnce[B]
und die Unterschrift des map
def map[B](f: (A) ⇒ B): IndexedSeq[B]
Sie können sehen, dass der Ergebnistyp von f
GenTraversableOnce[B]
für flatMap
sein muss. , aber es gibt keine Einschränkung in der Ergebnisart von f
für map
.
Der Ergebnistyp von println(x)
ist Unit
und der Ergebnistyp x+2
ist Int
. Da beide GenTraversableOnce[B]
nicht implementieren, können Sie flatMap(x=>println(x))
noch flatMap(x=>x+2)
nicht tun.
Auf der anderen Seite Some(i)
und None
haben Art von Option[Int]
, die implizit source
Die Signatur von Iterable ist
trait Iterable[+A] extends Traversable[A]
und Traversable ist
trait Traversable[+A] .. with TraversableOnce[A]`
zu Iterable[Int]
umgewandelt werden können und schließlich TraversableOnce ist
trait TraversableOnce[+A] extends GenTraversableOnce[A]
daher Option[Int]
implementiert GenTraversableOnce[Int]
, so dass Sie es als Ergebnis von flatMap[Int]
[Karte gegen FlatMap auf Zeichenfolge] verwenden (https://stackoverflow.com/questions/19209519/map-versus-flatmap -on-string) Beantworten Sie Ihre Frage – prayagupd
Dies ist ähnlich wie https://stackoverflow.com/questions/42997900/apache-spark-comparison-of-map-vs-flatmap-vs-mappartitions-vs-mappartitionswith –