У меня есть два хэшмапа, которые мне нужно объединить.Объединение двух хэш-карт с одним и тем же ключом и одинаковыми или разными значениями
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]}
Если я создаю карту 3 и сделаю addAll(), некоторые значения будут перезаписаны. Как и в случае с Организацией, я получаю только Королевскую комиссию и Юнайтед. Я написал код слияния для двоих, но получаю исключение с нулевым указателем. Я просто хочу знать, правильно ли этот подход. Я буду отлаживать и выяснять, почему я получаю исключение.
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;
}
Спасибо! Но этот код, похоже, не работает. Я избавился от исключения нулевого указателя, но значения все равно перезаписываются. – serendipity
@serendipity см. Update –
перед первым циклом, c пуст, поэтому, поскольку ключи все разные, c не может содержать текущий ключ, поэтому никакого теста не требуется. –