Creé una clase Foo
que tiene el método toArray()
que devuelve Array<Int>
.Iteración sobre un HashMap de HashMaps en Java (o Scala)
Ahora, tengo una asignación de HashMap Cadenas a HashMaps, que asignan objetos a Foo. Es decir:
HashMap<String,HashMap<Object,Foo>>
y quiero crear un nuevo objeto de tipo:
HashMap<String,HashMap<Object,Array<Int>>>
que se obtiene llamando a la función toArray() para cada elemento de Foo en el Hashmap originales.
para hacerlo que normalmente haría algo como:
public static HashMap<String,HashMap<Object,Array<Int>>> changeMap(Map mpOld) {
Object key2;
String key1;
Iterator it2;
HashMap<String,HashMap<Object,Array<Int>>> mpNew=
new HashMap<String,HashMap<Object,Array<Int>>>()
Iterator it1 = mpOld.keySet().iterator();
while (it1.hasNext()) {
key1=it1.next();
it2= mpOld.get(key1).keySet().iterator();
mpNew.put(key1,new HashMap<Object,Array<Int>>())
while (it2.hasNext()) {
key2=it2.next();
mpNew.get(key1).put(key2,mpOld.get(key1).get(key2).toArray());
//TODO clear entry mpOld.get(key1).get(key2)
}
//TODO clear entry mpOld.get(key1)
}
return mpNew;
}
Un código similar funciona bien, pero el tamaño de la HashMap es demasiado grande como para contener dos de ellos en la memoria. Como puede ver, agregué dos puntos en los que quiero borrar algunas entradas. El problema es que, si lo hago, obtengo un error de concurrencia o el ciclo del iterador simplemente termina.
Me pregunto si existe una forma mejor de recorrer los mapas y copiar la información.
Además, estoy trabajando en un proyecto de Scala pero aquí tengo que usar los tipos de Java para algunos problemas de compatibilidad. Aunque Java.util.HashMap
no es un iterador, ¿tal vez Scala tiene alguna funcionalidad oculta para lidiar con esto?
Gracias,
Gracias, pero a pesar de que estoy usando Scala para el proyecto, los HashMaps son HashMaps Java, por lo que no se puede llamar mapVAlues en ellos. ¿Hay alguna manera de resolver esto usando JavaConversions? – Skuge
¿Pudo resolver su problema? ¿Mi edición ayudó? –