Mutable Hashmap不会在foreach循环内更新

时间:2015-12-14 11:08:23

标签: scala

我有类似的问题。看完帖后, Scala: mutable HashMap does not update inside for loop 我将代码更改为在添加到HashMap时使用update()

val tempLHM = new HashMap[String, String] //[edge, vertex] 
pit.foreach { x => 
  val pp = x.getList(0).iterator()    
  while(pp.hasNext()){
    val pitcol = pp.next().toString().split("\\s+")  
    tempLHM.update(pitcol.apply(0).toString(), pitcol.apply(2).toString())  
  }
}

//level0 ppin mapped as edge->vertex println(tempLHM.size)} } 
println(tempLHM.size)

请注意,while循环中的第一个print stmt会正确打印大小,但最后一行的stmt会打印0。

这是foreach函数的行为吗? 谢谢!

UPDATE1:我已导入以下内容以使用mutable hashmap

import collection.mutable._

UPDATE2:坑是以下列方式派生的

val level0Table = hiveContext.read.json(hierarchyMap.get("toplevel").get._2)    
level0Table.registerTempTable("level0"+ hierarchyMap.get("toplevel").get._2)
val pit = level0Table.select("PIT") 

1 个答案:

答案 0 :(得分:0)

您的问题不提供示例数据或显示您使用的导入。但是,错误必须在输入数据或用于解析它的方法中。以下是使用可变映射的示例:

object MutableTest extends App {

  val data = List(("a", 1),
                  ("b", 2),
                  ("c", 3),
                  ("a", 0))

  val mutableMap = new scala.collection.mutable.HashMap[String, Int]

  data foreach {tup =>
    mutableMap.update(tup._1, tup._2)  
  }

  println(mutableMap)

}//end object MutableTest

结果如预期:

  

地图(b - > 2,a - > 0,c - > 3)

我建议您输出pit中的元素数量,输出每个pp中的元素数量,然后输出pitcol