2012-10-27 3 views
0

Я создаю демо-корзину для покупок в android для этого. Я использую класс Application для сохранения данных. Я не могу удалить данные из связанного списка. Я вызываю функцию removeItem() для активности android для удаления выбранного элемента из списка, но он не работает, кто-нибудь может мне помочь.Как удалить данные из связанного списка в java

+0

Используйте итератор для перебора по списку – twodayslate

ответ

1

Во-первых, переопределить equals() метод и использовать itemName атрибут для сравнения

@Override 
public boolean equals(Object o) { 
    if (o == null) return false; 
    if (itemName == null) return false; 
    if (o instanceOf String) return itemName.equals(o); 
    else if (o instanceOf GlobalData) return ((GlobalData) o).itemName.equals(this.itemName); 
    else return false; 
} 

Затем измените ваш метод removeItem()

public void removeItem(String iName) { 
    list.remove(iName); 
    // or uncomment line below to completely remove all matching elements 
    // for (;;list.remove(iName)) {} 
} 

Согласно http://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html#remove(java.lang.Object)remove() методом LinkedList будем называть equals() Способ поставки Object и сравнить его с каждым элементом в списке.

Надеюсь, что это поможет :)

0

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

for(Iterator<EmpDedup> iter = list.iterator(); iter.hasNext();) { 
    EmpDedup data = iter.next(); 
    if (data.getRecord() == rec1) { 
     iter.remove(); 
    } 
} 

см http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.html

Refered из https://stackoverflow.com/a/10735435/1602230

0

Вы не можете изменить коллекцию, используя имеющиеся в наличии для каждого цикла. Используйте простой цикл for или while.

Для каждого цикла скрывается итератор, поэтому вы не можете вызвать remove. Следовательно, цикл for-each не используется для фильтрации. Точно так же не может использоваться для циклов, где вам нужно заменить элементы в списке или массиве при его перемещении.

Источник: http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html

В целом, коллекция под названием list хранящих элементы типа E использует итератор следующим образом:

Iterator<E> iterator = list.iterator(); 
while(iterator.hasNext()) { 
    <do something with iterator.next()>; 
} 
0

Используйте итератор, чтобы удалить элемент:

public void removeItem(String iName, int iQunt, int iCost) { 
    Iterator<GlobalData> iterator = list.iterator(); 
    while (iterator.hasNext()) { 
    GlobalData data = iterator.next(); 
    if (data.getItemName().equals(iName)) { 
     iterator.remove(); 
    } 
    } 
} 
0

- Вы параллельный доступ и модификации Collection, что не может быть сделана из For-Each цикла непосредственно ..

- Используйте Iterator, чтобы решить эту проблему.

LinkedList<GlobalData> q1 = new LinkedList<GlobalData>(); 

Iterator<GlobalData> iterator = q1.iterator(); 

while (iterator.hasNext()){ 

     GlobalData mp = iterator.next(); 

     if (mp.name.equals("xyz")){ 

      iterator.remove(); // You can do the modification here. 
     } 


}