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.
Ответы
Ответ 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);