我正在Android中创建一个演示购物车,我正在使用Application类来保存数据。我无法从链接列表中删除数据。我正在为android活动调用removeItem()函数从列表中删除所选项目,但它不起作用任何人都可以帮助我。
package in.co.santoshsharma.bookshopping;
import java.util.LinkedList;
import android.app.Application;
import android.content.res.Configuration;
public class GlobalData extends Application{
private String email;
private String itemName;
private int itemQuantity;
private int itemCost;
public GlobalData(){
}
public GlobalData(String iName,int iQunt,int iCost) {
// TODO Auto-generated constructor stub
this.itemCost=iCost;
this.itemName=iName;
this.itemQuantity=iQunt;
}
public void setEmail(String mail)
{
this.email=mail;
}
public String getEmail()
{
return email;
}
public String getItemName()
{
return itemName;
}
public int getItemCost()
{
return itemCost;
}
public int getItemQunt()
{
return itemQuantity;
}
LinkedList<GlobalData> list = new LinkedList<GlobalData>();
public void setList(String iName,int iQunt,int iCost)
{
list.add(new GlobalData( iName, iQunt, iCost));
}
public LinkedList<GlobalData> getList()
{
return list;
}
public void removeItem(String iName,int iQunt,int iCost)
{
for(GlobalData data:list)
{
if(data.getItemName().equals(iName))
{
list.remove(itemName);
//list.remove(iCost);
//list.remove(iQunt);
}
}
}
}
答案 0 :(得分: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)) {}
}
根据remove()
LinkedList
方法equals()
将调用所提供的Object
的{{1}}方法,并将其与列表中的每个元素进行比较。
希望这会有所帮助:)
答案 1 :(得分:0)
在迭代它们时,您无法在列表中操作(添加,删除...项目)。你必须使用Iterator
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
答案 2 :(得分:0)
您不能使用for-each循环修改Collection。使用简单的for
循环或while
。
for-each循环隐藏迭代器,因此您无法调用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()>;
}
答案 3 :(得分: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();
}
}
}
答案 4 :(得分: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.
}
}