Question

Quelle est la différence entre les fonctions map et de flatMap Iterable?

Était-ce utile?

La solution

Voici une très bonne explication:

http: // www. codecommit.com/blog/scala/scala-collections-for-the-easily-bored-part-2

En utilisant la liste comme un exemple:

La signature de carte est:

map [B](f : (A) => B) : List[B]

et flatMap est de

flatMap [B](f : (A) => Iterable[B]) : List[B]

flatMap prend un type [A] et renvoie un type itérable [B] et carte prend un type [A] et renvoie un type [B]

Cela vous donnera aussi une idée qui va flatmap listes « aplatir ».

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)

Autres conseils

Ce qui précède est vrai, mais il y a une chose qui est à portée de main: un tourne flatMap en List[Option[A]] List[A], avec tout ce que Option jusqu'à fore None, enlevé. C'est une percée conceptuelle clé pour aller au-delà en utilisant null.

De scaladoc :

  • carte
  

Retourne le résultat itérables   d'application de la fonction f donnée à   chaque élément de cette iterable.

  • flatMap
  

applique la fonction donnée f   à chaque élément de cette iterable, puis   concaténer les résultats.

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 le voir mieux pour 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 iterator intérieur pour sera traduit en « flatMap », à l'exception du dernier, qui est traduite en une « carte ». De cette façon, au lieu de retourner les collections imbriquées (une liste d'un tableau d'un tampon de bla, bla, bla), vous retournez une collection plat. Un ensemble formé par les éléments étant yield'ed -. Une liste de nombres entiers, dans ce cas,

Regardez ici: http: //www.codecommit. com / blog / scala / scala-collections-for-the-facilement partie ennuyez-2

« Rechercher flatMap » - il y a une explication vraiment bien de là. (En fait, il est une combinaison de « aplatir » et « carte » - caractéristiques des autres langues).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top