Ich habe zwei hashmaps, die ich zusammenführen muss.Kombinieren von zwei hashmaps mit dem gleichen Schlüssel und gleichen oder verschiedenen Werten
MAP 1 - [[LOCATION: United Kingdom], [PERSON: Alfred Theodore MacConkey], [ORGANIZATION: Royal Commission, United]]
MAP 2 -{LOCATION=[United Kingdom], ORGANIZATION=[Royal Commission], PERSON=[Alfred Theodore MacConkey]}
Wenn ich Map 3 erstellen und eine addAll() tun, werden einige Werte überschrieben. Wie bei ORGANISATION bekomme ich nur Royal Commission und United wird überschrieben. Ich habe einen Merge-Code für die beiden geschrieben, bekomme aber eine Null-Pointer-Ausnahme. Ich möchte nur wissen, ob dieser Ansatz richtig ist. Ich werde debuggen und herausfinden, warum ich die Ausnahme bekomme.
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;
}
Danke! Aber dieser Code scheint nicht zu funktionieren. Ich habe die Nullzeiger-Ausnahme beseitigt, aber die Werte werden immer noch überschrieben. – serendipity
@Serendipity siehe Update –
vor der ersten Schleife, c ist leer, so, wie die Schlüssel alle unterschiedlich sind, kann c nicht den aktuellen Schlüssel enthalten, daher ist kein Test erforderlich. –