Je vais vérifier si j'ai bien compris les fonctions flatten et flatMap.flatten et flatMap dans scala
1) Ai-je raison de ne pas aplatir les œuvres seulement lorsqu'une collection constitue d'autres collections. Par exemple, aplatissent travaillerait sur les listes suivantes
//list of lists
val l1 = List(List(1,1,2,-1,3,1,-4,5), List("a","b"))
//list of a set, list and map
val l2 = List(Set(1,2,3), List(4,5,6), Map('a'->"x",'b'->"y"))
Mais aplatissent ne fonctionnera pas sur la suite
val l3 = List(1,2,3)
val l4 = List(1,2,3,List('a','b'))
val s1 = "hello world"
val m1 = Map('h'->"h", 'e'->"e", 'l'->"l",'o'->"0")
méthode
« aplatir » créerait une nouvelle liste comprenant tous les éléments en supprimant la hiérarchie. Ainsi, il «aplatit» la collection et ramène tous les éléments au même niveau. 2) 'flatMap' applique d'abord une méthode aux éléments d'une liste, puis aplatit la liste. Comme nous l'avons remarqué ci-dessus, la méthode aplatie fonctionne si les listes ont une hiérarchie (contiennent d'autres collections). Il est donc important que la méthode que nous appliquons aux éléments retourne une collection autrement flatMap ne fonctionnera pas
//we have list of lists
val l1 = List(List(1,1,2,-1,3,1,-4,5), List("a","b"))
l1 flatMap(x=>x.toSet)
res2: List[Any] = List(5, 1, -4, 2, 3, -1, a, b)
val l2 = List(Set(1,2,3), List(1,5,6), Map('a'->"x",'b'->"y"))
l2.flatMap(x=>x.toSet)
res3: List[Any] = List(1, 2, 3, 1, 5, 6, (a,x), (b,y))
val s1 = "hello world"
s1.flatMap(x=>Map(x->x.toString))
On remarque que ci-dessus s1.flatten ne fonctionnait pas, mais s1.flatMap a fait. C'est parce que, dans s1.flatMap, nous convertissons les éléments d'une chaîne (caractères) en une carte qui est une collection. Ainsi la chaîne a été convertie en une collection de Maps comme (Carte ('h' -> "h"), Carte ('e' -> "e"), Carte ('l' -> "l"), Carte ('l' -> "l"), Carte ('o' -> "o") ....) Ainsi aplatir va fonctionner maintenant. Notez que la carte créée n'est pas Map ('h' -> "h", 'e' -> "e", 'l' -> "l", ....).
Eh bien .... ouais ... – Dima
Et votre question est? –
La question implicite est 'ai-je compris' aplatir et flatmap correctement? ' –