在映射中找不到键时跳过Scala

在映射中找不到键时跳过Scala,scala,Scala,当我在地图中找不到钥匙时,我尝试执行以下操作 val states = Seq(Ca, Wa, Ny) val tuples: Seq[Any] = for(state <- states) yield { val mapValue: Option[CustomCaseClass] = someMap.get(key) mapValue match { case Some(value) => { //do some operations and retur

当我在
地图中找不到钥匙时,我尝试执行以下操作

val states = Seq(Ca, Wa, Ny)
val tuples: Seq[Any] = for(state <- states) yield {
  val mapValue: Option[CustomCaseClass] = someMap.get(key)
  mapValue match {
    case Some(value) => {
      //do some operations and return a tuple (String, String)
    }
    case _ => //do nothing, just continue the for loop
  }
}
val states=Seq(加利福尼亚州、华盛顿州、纽约州)
val元组:Seq[Any]=for(state){
//执行一些操作并返回元组(String,String)
}
case=>//什么都不做,只需继续for循环
}
}
对于
情况
我不想做任何事情,只想继续循环。但是有了上面的代码,我无法对
元组
执行
toMap
,我得到以下错误-


无法证明任何,因为
case
返回了
nothing
,所以
结果
类型是
Seq[Any]
,您可以过滤未找到的元素并进行
映射

val tuples: Seq[(String, String)] = 
    states.filter(i => someMap.get(i).nonEmpty).map(value => (myString, myString))

假设以下设置:

sealed trait State
case object Ca extends State
case object Wa extends State
case object Ny extends State

val someMap = Map(Ca -> 1, Wa -> 2)
val states = Seq(Ca, Wa, Ny)
我们可以使用
选项
作为同一
中的另一个生成器
进行理解:

val tuples: Seq[(String, String)] = for {
    state <- states
    value <- someMap.get(state)
} yield (state.toString, value.toString + "x")
您还可以在
中为
插入任意检查,以便检查密钥是否存在,并使用
someMap(key)
,而不是
someMap.get(key)

val tuples2:Seq[(字符串,字符串)]=for{
说明“1x”、“Wa”->“2x”))

空格返回
单位
,而不是
。此外,您不需要
映射.get(i).nonEmpty
,只需使用
map.contains(i)
assert(tuples.toMap == Map("Ca" -> "1x", "Wa" -> "2x"))
val tuples2: Seq[(String, String)] = for {
    state <- states
    if someMap.contains(state)
} yield (state.toString, someMap(state).toString + "x")

assert(tuples2.toMap == Map("Ca" -> "1x", "Wa" -> "2x"))