Я создаю демо-корзину для покупок в android для этого. Я использую класс Application для сохранения данных. Я не могу удалить данные из связанного списка. Я вызываю функцию removeItem() для активности android для удаления выбранного элемента из списка, но он не работает, кто-нибудь может мне помочь.Как удалить данные из связанного списка в java
ответ
Во-первых, переопределить 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
и сравнить его с каждым элементом в списке.
Надеюсь, что это поможет :)
Вы не можете работать в списках (добавлять, удалять ... элементы), пока вы их итерации на них. Вы должны использовать итератор
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
Вы не можете изменить коллекцию, используя имеющиеся в наличии для каждого цикла. Используйте простой цикл 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()>;
}
Используйте итератор, чтобы удалить элемент:
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();
}
}
}
- Вы параллельный доступ и модификации 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.
}
}
Используйте итератор для перебора по списку – twodayslate