出于一些奇怪的原因,有一种方法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集合通用特征的默认实现?
答案 0 :(得分:0)
您可以从一个空的HashMap开始,并在那里添加所有元素:
immutable.HashMap.empty ++= yourMap
答案 1 :(得分:0)
这不会回答您的问题,但它可以解决您的问题。 它只会更快:
merged
方法++
方法进行合并。