问题陈述:
当我试图清除Map列时,处理程序Map的列部分也会被清除。有办法避免吗?
def getTransformations(configuration: NodeSeq) {
var id: Int = 0
var methodCall: String = ""
val completeTransformation = Map[Int, Map[String, Map[String, String]]]()
val transformationsMap = Map[Int, Map[String, Map[String, String]]]()
val handlers = Map[String, Map[String, String]]()
val columns = Map[String, String]()
for (transformations <- configuration \\ "transformations") {
for (transformation <- transformations \\ "transformation") {
id += 1
for (handler <- transformation \\ "handler") {
for (input <- handler \\ "input") {
columns.+=(((input \\ "@name").mkString) -> input.text)
}
handlers(handler.attribute("type").mkString) = columns
columns.clear()
}
transformationsMap(id) = handlers
handlers.clear()
}
}
transformationsMap
}
示例:如图所示,处理程序Map是使用列Map构建的
当columns.clear被执行时,它在处理程序Map中的值也被清除
2条答案
按热度按时间wwtsj6pe1#
你设置的只是参考
columns
至handlers
不是价值观。一旦你清理了columns
,您正在从的内存中删除值columns
参考和输入handlers
你提到的地方columns
也反映了这种变化。全都是。为避免此问题,请将columns
并分配给handler
.它取决于你,你想要可变或不变的Map,同时创建新的副本。
yptwkmov2#
fwiw,“scala”写你在这里要做的事情的方式是这样的: