【问题标题】:populate HashMap programatically from collection in Scala从 Scala 中的集合以编程方式填充 HashMap
【发布时间】:2013-06-19 21:04:12
【问题描述】:

鉴于以下情况:

mergeMap:HashMap[String,HashSet[String]]

为什么 val x 不检查 HashMap[String,Integer] ?

val x = HashMap[String,Integer]().withDefault(_ => 1).++( mergeMap.map { case(id,codes) => codes } )

相反,它类型检查为: scala.collection.mutable.Iterable[Serializable with ScalaObject with 等于]

我怎样才能让它这样做?

谢谢!

【问题讨论】:

  • 您将一堆值(没有键)附加到对(键,值)的集合中,为什么它应该起作用?此外,您正在尝试将整数与字符串的 HashSet 结合起来。
  • 哦,拜托,不要对我投反对票。你会伤害我的海象感情。

标签: scala


【解决方案1】:

我不知道你到底想做什么,但是是这样的吗?

    scala> val mergeMap = Map(("key1", "value1"), ("key2", "value2"), ("key3", "value1"))
    mergeMap: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(key1 -> value1, key2 -> value2, key3 -> value1)

    scala> mergeMap.values.toSet.map((_ : String, 1)).toMap
    res12: scala.collection.immutable.Map[String,Int] = Map(value1 -> 1, value2 -> 1)

第一个创建从字符串到字符串的映射(而不是像您的示例中那样从字符串到字符串集合)。

第二个从映射中获取所有值,并构建一个新映射,其中第一个映射中的值作为键,默认值 1 作为每个值。重复键被丢弃(在“toSet”步骤中,并将在“toMap”步骤中再次丢弃)。

【讨论】:

  • HashMap[String,Integer]().++(mergeMap.values.flatten.map((_:String, 1:Integer)).toMap)
  • 这是根据你的回答,你应该把它放上来。谢谢!
猜你喜欢
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 2012-08-08
  • 2019-12-12
相关资源
最近更新 更多