#java
#java
Вопрос:
У меня есть две инициализированные хэш-карты, как показано ниже
FieldType — это объект JAXB.
Map<String, FieldType> onsDetailsMap = new LinkedHashMap<String, FieldType>();
Map<String, FieldType> uxDetailsMap = new LinkedHashMap<String, FieldType>();
Я пытаюсь сравнить «Ключ» двух хэш-карт. Если два ключа равны, мне нужно извлечь «Ключ», и это объект JAXB, записать в другую хэш-карту и удалить ее из фактической хэш-карты.
Попытался удалить его с помощью hashmap.remove(key), но он выдает java.util.ConcurrentModificationException Исключение
for (String key : onsDetailsMap.keySet()) {
if (uxDetailsMap.containsKey(key)) {
System.out.println("BOTH :: " key);
onsDetailsMap.remove(key);
}else {
System.out.println("ONS only :: " key);
}
Комментарии:
1. Вам нужно будет использовать iterator или преобразовать его в arraylist, а затем делать что-то еще.
Ответ №1:
Вы не можете перебирать карту в цикле for и удалять записи с этой карты одновременно. Попробуйте это
Iterator entries = onsDetailsMap.entrySet().iterator();
while (entries.hasNext()) {
Entry<String, FieldType> entry = (Entry) entries.next();
if (uxDetailsMap.containsKey(entry.getKey()) {
System.out.println("BOTH :: " entry.getKey());
entries.remove();
}
}
Комментарии:
1. Код выдает ошибку, метод ‘contains (Object)’ не определен для Map(String, FieldType). FieldType — это объект JAXB.
2. О, моя ошибка. Это должна быть необработанная запись и неправильный метод contains. Я обновил ответ.
3. Как мне получить «Значение» соответствующего «ключа»? FieldType является объектом JAXB?
4. Оператор if в приведенном выше фрагменте отсутствует a ).
Ответ №2:
Iterator<String, FieldType> iter = onsDetailsMap.entrySet().iterator();
while (iter.hasNext()) {
Entry<String, FieldType> entry = (Entry) entries.next();
if (uxDetailsMap.contains(entry.getKey()) {
iter.remove();
}
}
Ответ №3:
Попробуйте этот код, он работает нормально
Iterator entries = onsDetailsMap.entrySet().iterator();
while (entries.hasNext()) {
Entry entry = (Entry) entries.next();
if(!uxDetailsMap.containsKey(entry.getKey()))
{
System.out.println("Single value:: " entry.getKey());
entries.remove();
}
}
Комментарии:
1. Спасибо за решение. Это работает. Могу ли я также получить код о том, как мне получить значение этого конкретного ключа? Map<Строка, JAXBObject> .
2. Какое значение вы хотите получить из map уникального или дублирующего? и на какой карте вы хотите сохранить карту выхода или новую?
3. Требуется значение соответствующего «ключа», здесь «значение» — это объект JAXB.
4. как мне преобразовать объект в список?
5. Моя фактическая цель — создать xml из объекта. Поэтому необходимо получить объект (значение ключа) в hashmap.
Ответ №4:
for (Iterator<Map.Entry<String, Integer>> iterator = onsDetailsMap.entrySet().iterator(); iterator.hasNext();) {
Map.Entry<String, Integer> entry = iterator.next();
if (uxDetailsMap.containsKey(entry.getKey()))
iterator.remove();
}