如何转换可变.映射到可变。Scala 中的 HashMap?

How to convert mutable.Map to mutable.HashMap in Scala?

提问人:robinki 提问时间:12/15/2016 更新时间:12/15/2016 访问量:597

问:

我正在用 Scala 扩展 Sparks,进行一些实验。其中一部分是定义方法。AccumulableParam[mutable.HashMap[Int,Long], Int]def addInPlace(t1: mutable.HashMap[Int,Long], t2: mutable.HashMap[Int,Long]): mutable.HashMap[Int,Long]

我想做什么:

import scala.collection.mutable.HashMap

def addInPlace(t1: mutable.HashMap[Int,Long], t2: mutable.HashMap[Int,Long]): 
 mutable.HashMap[Int,Long] = {
   t1 ++ t2.map { case (s, c) => (s, c + t1.getOrElse(s, 0L)) }
}

我收到错误:

可变类型的表达式。Map[Int, Long] 不符合选定的可变类型。HashMap[整数,长]

在本例中,运算符返回 Map 而不是 HashMap,即使这两个术语 和 的类型都是 。++t1t2.map {...}HashMap[int, Long]

所以我的问题是,如何让返回一个 HashMap 代替,或者如何将结果转换为 .++MapHashMap

斯卡拉 Apache 火花 收集 可变

评论

2赞 Yuval Itzchakov 12/15/2016
为什么需要使用混凝土? 在被子下将使用 .HashMapMapHashMap
0赞 Dima 12/15/2016
他说^^^。只需将所有内容声明为 .Map

答:

0赞 Anton Okolnychyi 12/15/2016 #1

一个丑陋的方法是在结果地图上使用:asInstanceOf[mutable.HashMap[Int, Long]]

def addInPlace(t1: mutable.HashMap[Int,Long], t2: mutable.HashMap[Int,Long]): mutable.HashMap[Int,Long] = {
  val result = t1 ++ t2.map { case (s, c) => (s, c + t1.getOrElse(s, 0L)) }
  result.asInstanceOf[mutable.HashMap[Int, Long]]
}