如何把scala Map转换成scala.collection.immutable.HashMap?

时间:2016-05-02 11:16:19

标签: scala scala-collections

出于一些奇怪的原因,有一种方法merged只在scala.collection.immutable.HashMap中声明,而不是在通用Map特征中声明(也许它的实现使得其他{Map非常难以接受1}}实现?)。

所以我需要将Map[A, B]转换为HashMap[A, B],到目前为止我找不到一个简单的方法。这是我def to[Col[_]]周围 hack 的当前实现,它期望一元高级而不是二元高级。

val m1 = Map("foo" -> 1)
val m2 = Map("foo" -> 2, "bar" -> 2)

type HM[_] = HashMap[String, Int]
(m1.to[HM] merged m2.to[HM]) { case ((k1, v1), (k2, v2)) => (k1, v1 + v2) } // Map("foo" -> 3, "bar" -> 2)

它按预期工作但我不得不认为必须有更好的方法从Map转换为HashMap(鉴于它是默认实现)。

或者更一般地,更好的方式来访问scala集合通用特征的默认实现?

2 个答案:

答案 0 :(得分:0)

您可以从一个空的HashMap开始,并在那里添加所有元素:

immutable.HashMap.empty ++= yourMap

答案 1 :(得分:0)

这不会回答您的问题,但它可以解决您的问题。 它只会更快:

  1. 实施地图所需的merged方法
  2. 使用地图上定义的++方法进行合并。