我有一些代码生成Map
,其值为Option
类型,我当然想要一个仅包含实际值的地图。
所以我需要转换它,我在代码中提出的是
def toMap[K,V](input: Map[K, Option[V]]): Map[K, V] = {
var result: Map[K, V] = Map()
input.foreach({
s: Tuple2[K, Option[V]] => {
s match {
case (key, Some(value)) => {
result += ((key, value))
}
case _ => {
// Don't add the None values
}
}
}
})
result
}
哪个有效,但似乎不优雅。我怀疑这个内置于收藏库中的内容是我所遗漏的。
是否有内置的东西,或者更为惯用的方法来实现这一目标?
答案 0 :(得分:40)
input.collect{case (k, Some(v)) => (k,v)}
答案 1 :(得分:10)
input flatMap {case(k,ov) => ov map {v => (k, v)}}
答案 2 :(得分:7)
for ((k, Some(v)) <- input) yield (k, v)
这是franza在后来的问题中给出的答案,但它值得重新发布。