Подтвердить что ты не робот

UnsupportedOperationException при использовании iterator.remove()

Я пытаюсь удалить некоторые элементы из List, но даже самые простые примеры, такие как этот ответ или this, не будет работать.

public static void main(String[] args)
{
    List<String> list = Arrays.asList("1", "2", "3", "4");
    for (Iterator<String> iter = list.listIterator(); iter.hasNext();)
    {
        String a = iter.next();
        if (true)
        {
            iter.remove();
        }
    }
}

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(Unknown Source)
    at java.util.AbstractList$Itr.remove(Unknown Source)

Использование обычного Iterator вместо ListIterator не помогает. Что мне не хватает? Я использую java 7.

4b9b3361

Ответ 1

Arrays.asList() возвращает список, поддерживаемый исходным массивом. Изменения, внесенные в список, также отражаются в массиве, в который вы проходите. Поскольку вы не можете добавлять или удалять элементы в массивы, это также невозможно сделать для списков, созданных таким образом, и поэтому ваш вызов remove завершается с ошибкой. Вам нужна другая реализация List (ArrayList, LinkedList и т.д.), Если вы хотите динамически добавлять и удалять элементы.

Ответ 2

Это всего лишь особенность массива Arrays.asList() и задан вопрос перед тем, как просмотреть этот вопрос

Вы можете просто обернуть это в новый список

List list = new ArrayList(Arrays.asList("1",...));

Ответ 3

Создайте новый список с элементами, которые хотите удалить, а затем вызовите removeAll метод.

List<Object> toRemove = new ArrayList<Object>();
for(Object a: list){
    if(true){
        toRemove.add(a);
    }
}
list.removeAll(toRemove);