私があなたなら、2 つのステップを実行します。これを考えるとMap:
val map = Map("a" -> "b", "b" -> "c", "c" -> "d", "d" -> "e")
そしてこれList:
val list = List("a", "c", "e")
最初にmap、Option内のすべてのアイテムに値を設定しますList。アイテムに価値があるかどうかを示します。
val mapped = list.map(item => item -> map.get(item))
これにより、次のようになります。
mapped: List[(String, Option[String])] =
List(("a",Some("b")), ("c",Some("d")), ("e", None))
マップ上で呼び出すgetと、ラップされた結果が返されます。結果がある場合は、結果が でラップされて取得されますSome。そうしないと、None. 両方とも is のサブクラスでOption Optionあり、 を処理しなくても null 値を提供するクロージャー コンストラクトですnull。今、あなたはmap再び目標を達成することができます。
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の値を抽出するSomeか、パラメータの場合はパラメータにフォールバックしますNone。
よりプロフェッショナルに見せるために、この式を 1 行で記述できます ;)
val result = list.map(item => item -> map.get(item).getOrElse("No match"))
これにより、まったく同じ結果が得られます。