私があなたなら、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"))
これにより、まったく同じ結果が得られます。