Si j'étais vous, je ferais deux pas. Compte tenu de cette Map
:
val map = Map("a" -> "b", "b" -> "c", "c" -> "d", "d" -> "e")
et ce List
:
val list = List("a", "c", "e")
Au début, je voudrais map
une valeur Option
à chaque élément de la List
. Vous donner s'il y a une valeur pour l'article.
val mapped = list.map(item => item -> map.get(item))
Cela vous donnera ceci:
mapped: List[(String, Option[String])] =
List(("a",Some("b")), ("c",Some("d")), ("e", None))
Appel get
sur la carte renvoie un résultat emballé. S'il y a un résultat, vous obtiendrez le résultat enveloppé dans un Some
. Sinon, vous obtiendrez un None
. Les deux sont des sous-classes de Option
Option
est une construction de fermeture, qui vous fournit une valeur nulle sans avoir à traiter null
. Maintenant, vous pouvez à nouveau map
, pour atteindre votre objectif.
val result = mapped.map(tuple => tuple._1 -> tuple._2.getOrElse("No match"))
result: List[(String, String)] = List(("a","b"), ("c","d"), ("e","No match"))
getOrElse
extrait la valeur d'un Some
ou retombe au paramètre si elle est un None
.
Pour le rendre plus professionnel, nous pouvons écrire cette expression dans une ligne;)
val result = list.map(item => item -> map.get(item).getOrElse("No match"))
Cela vous donnera exactement le même résultat.
Cette implémentation retournera 'Unit' car vous avez utilisé' foreach'. Quel type de structure de données voulez-vous? –
Peut être une liste, en plus, si j'obtiens une liste, je pourrai aplatir la liste à une chaîne? –