Cómo actualizar el valor de una clave en un árbol de mapas inmutable en Scala
Estoy utilizando Scala 2.11 y estoy tratando de actualizar el valor de una clave en el tree map. Intenté usar el método updated
:
private val xyz = List(0, 100000, 500000, 1000000)
private val abc = List (0, 5, 25, 50)
private var a = TreeMap.empty[Int, TreeMap[Int, Int]] ++ xyz.map {
aa => aa -> (TreeMap.empty[Int, Int] ++ abc.map(bb => bb -> 0))
}
a(xyz(0)).foreach {
case (key, value) =>
if (key < 50) {
a(xyz(0)) = a(xyz(0)).updated(key, 5)
}
}
Y obtuve el siguiente error:
value update is not a member of scala.collection.immutable.TreeMap[Int,scala.collection.immutable.TreeMap[Int,Int]]
¿Es posible actualizarlo? ¿O alguien podría ayudarme a replicar la lógica usando un Java TreeMap ya que también me permitirá usar las funciones floorEntry
y ceilingEntry
? Intenté convertirlo a un Java TreeMap y generó un mapa regular, no un tree map:
private var a = TreeMap.empty[Int, TreeMap[Int, Int]] ++ xyz.map {
aa => aa -> (TreeMap.empty[Int, Int] ++ abc.map(bb => bb -> 0)).asJava
}
private var b = a.asJava
davy.ai
El mensaje de error indica que
TreeMap
es inmutable y no tiene un métodoupdated
. Esto significa que no puedes actualizar un valor directamente en unTreeMap
. En su lugar, necesitas crear un nuevoTreeMap
con el valor actualizado y reemplazar el antiguo. Aquí tienes cómo puedes modificar tu código para actualizar el valor de una clave en elTreeMap
:Este código crea un nuevo
TreeMap
con el valor actualizado5
en la clave25
en elTreeMap
en la clave0
ena
.Para replicar la lógica utilizando un
TreeMap
de Java, esto es lo que puedes hacer:Este código crea un
TreeMap
de Java y lo llena con los mismos datos que en la versión Scala. Luego, actualiza el valor de una clave de la misma manera que antes. Finalmente, demuestra cómo usar las funcionesfloorEntry
yceilingEntry
en unTreeMap
de Java.</integer,></integer,></integer,></integer,>