Quelle est la différence entre les fonctions map
et flatMap
de Iterable
?
Voici une très bonne explication:
http://www.codecommit.com/blog/scala/scala-collections-for-the-astillement-bored-part-2
Utilisation de la liste comme exemple:
La signature de la carte est:
map [B](f : (A) => B) : List[B]
et Flatmap's est
flatMap [B](f : (A) => Iterable[B]) : List[B]
Alors platmap prend un type [A] et retourne un type itérable [B] et la carte prend un type [A] et renvoie un type [B]
Cela vous donnera également une idée que Flatmap "aplatira" les listes.
val l = List(List(1,2,3), List(2,3,4))
println(l.map(_.toString)) // changes type from list to string
// prints List(List(1, 2, 3), List(2, 3, 4))
println(l.flatMap(x => x)) // "changes" type list to iterable
// prints List(1, 2, 3, 2, 3, 4)
Ce qui précède est tout vrai, mais il y a encore une chose qui est pratique: flatMap
active un List[Option[A]]
dans List[A]
, avec n'importe quel Option
qui exercure jusqu'à None
, supprimé. Il s'agit d'une percée conceptuelle clé pour aller au-delà de l'utilisation de null
.
lines.map(line => line split "\\W+") // will return a list of arrays of words
lines.flatMap(line => line split "\\W+") // will return a list of words
Vous pouvez voir cela mieux pour les compréhensions:
for {line <- lines
Word <- line split "\\W+"}
yield Word.length
cela se traduit par:
lines.flatMap(line => line.split("\\W+").map(Word => Word.length))
Chaque itérateur à l'intérieur pour sera traduit en une "plattam", à l'exception de la dernière, qui est traduite dans une "carte". De cette façon, au lieu de retourner des collections imbriquées (liste d'un tableau d'un tampon de Blah, Blah, Blah), vous retournez une collection à plat. Une collection formée par les éléments étant donné - une liste d'entiers, dans ce cas.
De - Scaladoc :
Retourne le démonteur résultant de l'application de la fonction donnée F à chaque élément de cette ierérable.
Applique la fonction donnée F à chaque élément de celui-ci, puis concatéra les résultats.
Regardez ici: http://www.codecommit.com/blog/scala/scala-collections-for-the-asily-bored-Part-2
"Recherche platmap" - il y a une très bonne explication de celui-ci. (Fondamentalement, il s'agit d'une combinaison de "aplatissée" et de "carte" - fonctionnalités d'autres langues).