繁体   English   中英

将Map [K,Option [V]]转换为Map [K,V]的更好方法

[英]Better way of converting a Map[K, Option[V]] to a Map[K,V]

我有一些代码生成一个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
  }

哪个有效,但看起来不够优雅。 我怀疑这个内置于我缺少的馆藏库中的东西。

是否有内置的东西,或更实用的方法来实现这一目标?

input.collect{case (k, Some(v)) => (k,v)}
input flatMap {case(k,ov) => ov map {v => (k, v)}}
for ((k, Some(v)) <- input) yield (k, v)

从后来的问题来看,这是franza的答案,但值得重新发布。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM