Comment faire un map sur un conteneur de paires en Scala

Publié le 22 Juin 2015

En fait rien de particulier sur ce cas là si ce n'est la façon de déstructurer les arguments de la fonction de mapping. Ça à l'air compliqué mais pas tant que ça en fait. Prenons un exemple avec une liste de paires:

val paires = List("Jurassic Park" -> 1993, "Star Wars" -> 1977, "Shaun the sheep" -> 2015)

Voilà notre conteneur. Maintenant effectuons un mapping dessus:

val films = paires.map( paire => s"${paire._2} sorti en ${paire._1}")

Rien de spécial ici, ça fonctionne mais l'utilisation des _1 et _2 pour accéder aux membres de notre paire n'est pas très lisible.

J'aurai préférai écrire quelque chose comme ceci:

val films = paires.map( (titre, année) => s"$titre sorti en $annee")

Voilà qui est plus clair mais cela ne compile pas. En fait il faut utiliser un pattern matching pour déstructurer la paire:

val films = paires.map(film => film match {
   case (titre, annee) -> s"$titre sort en $annee"
})

C'est pas mal et ça fonctionne mais le pattern matching est un peu lourd.

Heureusement on peut supprimer le "match" et ne garder que le "case":

val films = paires.map { case (titre, annee) => s"$titre sorti en $annee" }

A part le "case" en plus on est assez proche de la forme déstructurée mais voilà il faut bien penser à utiliser le "case" sinon ça ne compile pas.

Rédigé par Bliz

Publié dans #Scala

Repost 0
Commenter cet article