J'ai deux hashmaps à fusionner. Si je crée la carte 3 et que je fais un addAll(), certaines valeurs sont remplacées. Comme dans le cas de l'organisation je reçois seulement la Commission royale et United est écrasé. J'ai écrit un code de fusion pour les deux mais obtenir une exception de pointeur null. Je veux juste savoir si cette approche est correcte. Je vais déboguer et comprendre pourquoi je reçois l'exception.Combinaison de deux hashmaps avec la même clé et des valeurs identiques ou différentes
public static LinkedHashMap<String,Vector<String>> merge(HashMap<String, Vector<String>> a, HashMap<String, Vector<String>> b) {
LinkedHashMap<String,Vector<String>> c = new LinkedHashMap<String,Vector<String>>();
Set<Entry<String,Vector<String>>> entriesA = a.entrySet();
Set<Entry<String,Vector<String>>> entriesB = b.entrySet();
for (Map.Entry<String, Vector<String>> entry : entriesA) {
Vector<String> aValues = a.get(entry.getValue());
String aKey = entry.getKey();
Vector<String> allValues = entriesA.contains(aKey) ? a.get(aKey) : new Vector<String>();
allValues.addAll(aValues);
c.put(aKey, allValues);
}
for (Map.Entry<String, Vector<String>> entry : entriesB) {
Vector<String> bValues = b.get(entry.getValue());
String bKey = entry.getKey();
if(c.containsKey(bKey) && c.get(bKey).equals(bValues)) {
continue;
}
else if(c.containsKey(bKey) && !(c.get(bKey).equals(bValues))) {
c.put(bKey, bValues);
}
}
return c;
}
Merci! Mais ce code ne semble pas fonctionner. Je me suis débarrassé de l'exception du pointeur nul mais les valeurs sont toujours écrasées. – serendipity
@serendipity voir la mise à jour –
avant la première boucle, c est vide, donc, comme les touches sont toutes différentes, c ne peut pas contenir la clé actuelle, donc pas de test nécessaire. –