Domanda

Qual è la differenza tra il map e flatMap funzioni di Iterable?

È stato utile?

Soluzione

Qui è una buona spiegazione:

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

Utilizzo lista come un esempio:

la firma di Map è:

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

e flatMap di è

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

Quindi flatMap prende un tipo [A] e restituisce un tipo iterabile [B] e mappa prende un tipo [A] e restituisce un tipo di [B]

Questo vi darà anche un'idea che flatmap sarà "appiattire" le liste.

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)

Altri suggerimenti

Quanto sopra è tutto vero, ma c'è una cosa che è a portata di mano: flatMap trasforma un List[Option[A]] in List[A], con qualsiasi Option che entra in profondità per None, rimosso. Questo è un passo avanti concettuale fondamentale per ottenere parte l'utilizzo di null.

scaladoc :

  • mappa
  

Restituisce l'iterabile risultante   dall'applicare la funzione data f   ogni elemento di questo iterabile.

  • flatMap
  

Si applica la funzione data f   a ciascun elemento di questo iterabile, allora   concatena i risultati.

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

Si può vedere questo meglio a comprensioni:

for {line <- lines
     word <- line split "\\W+"}
yield word.length

questo si traduce in:

lines.flatMap(line => line.split("\\W+").map(word => word.length))

Ogni iteratore all'interno per sarà tradotto in un "flatMap", tranne l'ultimo, che si traduce in una "mappa". In questo modo, invece di tornare collezioni annidate (un elenco di una serie di un buffer di bla, bla, bla), si ritorna una collezione piatta. Una collezione formata dagli elementi in fase di yield'ed -. Una lista di interi, in questo caso

Guardate qui: http: //www.codecommit. com / blog / Scala / Scala-collezioni-per-il-facilmente-annoiato-parte-2

"Cerca flatMap" - c'è davvero una buona spiegazione di lì. (Fondamentalmente si tratta di una combinazione di "appiattire" e "mappare" - caratteristiche da altre lingue).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top