J'ai créé une classe Foo
qui a la méthode toArray()
qui renvoie un Array<Int>
.itération sur une HashMap de HashMaps en Java (ou Scala)
Maintenant, j'ai un HashMap mappage des chaînes à HashMaps, qui mappent les objets à Foo. C'est:
HashMap<String,HashMap<Object,Foo>>
Je veux créer un nouvel objet de type:
HashMap<String,HashMap<Object,Array<Int>>>
qui est obtenu en appelant la fonction toArray() pour chaque élément Foo dans le hashmap d'origine.
Pour faire normalement je donc faire quelque chose comme:
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 code similaire fonctionne très bien, mais la taille de la table de hachage est trop grand pour contenir deux d'entre eux dans la mémoire. Comme vous pouvez le voir, j'ai ajouté deux points où je veux effacer certaines entrées. Le problème est, si je le fais, j'obtiens une erreur de concurrence, ou la boucle d'itérateur se termine juste.
Je me demande s'il existe une meilleure façon de parcourir les cartes et de copier les informations.
Aussi, je travaille dans un projet Scala mais ici je dois utiliser des types Java pour certains problèmes de compatibilité. Bien que Java.util.HashMap
ne soit pas un itérateur, peut-être que Scala a une fonction cachée pour gérer cela?
Merci,
Merci, mais bien que j'utilise Scala pour le projet, les HashMaps sont Java HashMaps, de sorte que vous ne pouvez pas appeler mapVAlues sur eux. Est-ce que vous pouvez résoudre ce problème en utilisant JavaConversions? – Skuge
Avez-vous pu résoudre votre problème? Est-ce que mon édition a aidé? –