如果我是你,我会做两步。鉴于此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
. 两者都是Option
Option
闭包结构的子类,它为您提供空值而无需处理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
提取 a 的值,Some
如果它是 a ,则回退到参数None
。
为了让它看起来更专业,我们可以把这个表达式写成一行;)
val result = list.map(item => item -> map.get(item).getOrElse("No match"))
这将为您提供完全相同的结果。