2016-08-25 2 views
-1

У меня есть структура картыУдалить элемент из вложенной карты

Map<Integer, Map<String, String>> outerMap= getMap(); 

for (int count = 0; count < outerMap.size(); count++) { 
Map<String, String> innerMap = outerMap.get(count); 

String tempValue = innerMap.get("tempKey"); 
innerMap.remove("tempKey"); 
someOperations(tempValue); 
} 

Когда я удалить его при первой итерации с внутренней карты она удаляет этот ключ и значение пары из других карт, но это не то, что я хочу. Какие-либо предложения?

+0

Я предполагаю, что 'get (i)' всегда возвращает ту же карту. Как вы создаете эту карту точно? Введите код 'getMap()'. – Pshemo

ответ

0

Возможно, вы строите карты неверным образом.

Когда первый вызов innerMap.remove() на самом деле влияет на innerMap вы используете во второй итерации, то есть только одно объяснение: что innerMap должны быть же объект.

Так что я думаю, когда вы строите ваши карты, вы делаете что-то вроде:

Map<String, String> mapLaterUsedAsInner = new ... 
mapLaterUsedAsInner.put ... gets filled 

И тогда у вас есть что-то вроде

Map<Integer, Map<String,String>> outerMap = new ... 
for (int i=0; i< ...) { 
    outterMap.put(i, mapLaterUsedAsInner); 

Итак, суть: если вы хотите, чтобы ваш " внутренние карты "- все независимые друг друга, то они должны быть независимыми объектами. Если они не ... тогда первая модификация затрагивает их «все» («все» на самом деле просто один объект)!

Таким образом, решение может быть столь же легко, как:

Map<Integer, Map<String,String>> outerMap = new ... 
for (int i=0; i< ...) { 
    outterMap.put(i, new HashMap<>(mapLaterUsedAsInner)); 

как бы создавать отдельные копии за прилавком.

+0

Эй, спасибо. Это была большая помощь. –

+0

Рад это услышать. Итак, если это «ответит» на ваш вопрос, не стесняйтесь принять мой ответ. – GhostCat

Смежные вопросы