可能重复:
Better way of converting a Map[K, Option[V]] to a Map[K,V]
我从网页上读取值时有一个Map[Symbol, Option[String]]
,其中一些可能会丢失。
我想将此“展平”为Map[Symbol, String]
,删除所有None
值。
我能做的最好的事情是
def removeNones[K, V](map: Map[K, Option[V]]): Map[K, V] =
map.collect { case kv if kv._2.isDefined => (kv._1, kv._2.get) }
但我真的不喜欢case
,并且不得不重建Pair
。
有人能找到更好的表达吗?
答案 0 :(得分:9)
val m = Map('a -> Some("a string"), 'b -> None)
m collect {case(a, Some(b)) => (a, b)}
// Map('a -> a string)
似乎可以解决问题。
答案 1 :(得分:3)
我认为更优雅的方式是这样的:
val map1 = Map('a -> Some("a"), 'b -> None)
val map2 = for ((k: Symbol, Some(v)) <- map1) yield (k,v)
让我们打印结果:
Predef println map2
> Map('a -> a)