2012-10-27 52 views
0

我在android中创建一个演示购物车,为此我使用Application类保存数据。我无法从链接列表中删除数据。我调用android的活动removeItem()函数从列表中删除选定的项目,但它不工作任何人都可以帮助我。如何从java中的链接列表中删除数据

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

使用迭代器遍历列表 – 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)) {} 
} 

根据LinkedListhttp://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html#remove(java.lang.Object)remove()方法调用equals()提供的方法Object并将其与列表中的每个元素进行比较。

希望这有助于:)

0

不能修改使用for-each循环的集合。使用简单的for循环或while

for-each循环隐藏了迭代器,因此您不能调用remove。 因此,for-each循环不适用于过滤。同样地, 不适用于需要在列表中遍历列表 或数组时替换元素的循环。

来源:E类型的http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html

通常,集合命名list存储元件采用的迭代器以下面的方式:

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. 
     } 


}