2014-09-08 8 views
1

Это рег. требование, когда мне нужно удалить элемент из списка в java. Я получаю неподдерживаемое исключение, когда пытаюсь удалить элемент из списка. Ниже приведен код:Как удалить элемент из списка в java

String[] str_array = {"abc","def","ght"}; 
List<String> results = Arrays.asList(str_array); 
String tobeRemovedItem=""; 
for(int i=0;i<results.size();i++){ 
    if(results.get(i).equalsIgnoreCase(searchString)) { 
     tobeRemovedItem=results.get(i); 
    } 
} 
if(!TextUtils.isEmpty(tobeRemovedItem)) { 
    results.remove(tobeRemovedItem);  // I am getting exception here. 
} 

Может ли кто-нибудь помочь мне в решении этой проблемы?

+0

Примите во внимание использование большего количества пробелов. Благодарю. – async

ответ

0

Размер Перечня, возвращенный Arrays.asList, не может быть изменен. Вместо этого вы можете сделать:

List<String> results = new ArrayList<>(Arrays.asList(str_array)); 
+3

Это не размер 'Arrays # asList'. Это связано с тем, что возвращаемый «Список» не может быть изменен. –

+3

@LuiggiMendoza Вы можете изменить этот список с помощью метода 'set()'. Это только методы изменения размера, которые отключены. –

+0

Arrays.asList() возвращает массивы $ ArrayList, который является массивом фиксированного размера, похожим на массив фиксированного размера. –

2

Тип списка возвращаемый Arrays.asList не поддерживает remove операцию. Отсюда исключение.

Вместо этого вы можете использовать java.util.ArrayList.

List<String> results = new ArrayList<String>(Arrays.asList(str_array)); 
0

В общем, UnsupportedOperationException брошено в реализации интерфейса (или дочерним классом класса с абстрактным методом), где реализатор не хотел, чтобы поддержать этот конкретный метод.

При этом, чтобы отладить эти проблемы в будущем, проверьте, какую реализацию вы используете - в этом случае она передается с помощью метода Arrays.asList() из Android sdk. Здесь вы можете увидеть, что он не поддерживает добавление или удаление элементов в список.

Если вы должны добавить и удалить элементы, вы можете обернуть вызов в реализацию ArrayList List, который делает, поддерживает такую ​​модификацию (как предложено Banthar and khelwood). constructor принимает список в качестве входных данных и копирует элементы внутри.

1

Ответил уже, но теперь без непрямой структуры данных из .asList()

List<String> results = new ArrayList<>(); 
Collections.addAll(results, str_array); 

.asList является поддерживается массивом, следовательно, вы можете изменить исходный массив будет изменением списка. И наоборот, вы не можете увеличивать или сокращать список, так как тогда нужно будет заменить объект поддерживаемого массива, поскольку массивы фиксируются в java.

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