在映射中找不到键时跳过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"))