изменить карту списка, получая ConcurrentModificationException - PullRequest
0 голосов
/ 13 мая 2011

Привет! Я создаю два списка для хранения хороших и плохих значений данных. Я передаю эти списки методу, в котором я добавляю новое значение ключа в goodMap, проверяю некоторые условия в записи, если она не подходит, затем добавляю эту запись в плохой файл и удаляю ее из хорошего файла, но получаю oncurrentModificationException, пока делать это. Как мне это исправить?

псевдокод

    //original Lists of users
    List<Map<Object, Object>> _goodFile
    List<Map<Object, Object>> _badFile

    //tempList to hold return value
    List<Object> _tempList=new ArrayList<Object>(1);



    //call the method
    _tempList=cleanMap(_goodFile,_badFile)

     //assign the values back to original list
    _goodFile=_tempList.get(0);
    _badFile=tempList.get(1);


    //this is the method for cleaning

    public List<Object> cleanMap ( List<Map<Object, Object>> _temp1, List<Map<Object, Object>> _temp2)

    {

//return List

 List<Object> _returnList =new ArrayList<Object>(1);


for (Iterator<Map<Object, Object>> i = _temp1
                    .iterator(); i.hasNext();) 

            {
    Map<Object, Object> _Record = i.next();

     //first add a new key value pair to goodFile map
    _Record.put("Key","value");

    // check for condition; if it is bad remove from list

    if (bad)
    {
    //first add in bad file
    _temp2.add(_Record);

    //then remove from good file
    _temp1.remove(_Record);
    }

             }

return _returnList;

    }

Ответы [ 2 ]

8 голосов
/ 13 мая 2011

Вместо этого:

_temp1.remove(_Record);

попробуйте сделать это:

i.remove();

См. Javadoc для Iterator.remove .

0 голосов
/ 13 мая 2011

В противном случае вы также можете использовать ConcurrentHashMap () вместо hashMap. Это не даст вам исключения одновременной модификации во время удаления элементов при итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...