如何将scable中的mutable.Map转换为mutable.HashMap?

时间:2016-12-15 08:34:47

标签: scala apache-spark collections mutable

我正在使用Scala扩展Spark 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)) }
}

我收到了错误:

  

类型mutable.Map [Int,Long]的表达式不符合所选类型mutable.HashMap [Int,Long]

在这种情况下,++运算符返回Map而不是HashMap,即使t1t2.map {...}这两个术语都是HashMap[int, Long]类型。

所以我的问题是,如何让++改为返回HashMap,或者如何将结果Map转换为HashMap

1 个答案:

答案 0 :(得分:0)

一种丑陋的方法是在结果图上使用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]]
}