如何在arrayList <customclass> </customclass>中获取项的属性

时间:2015-03-10 06:39:00

标签: java android android-fragments android-listview arraylist

我有一个ArrayList itemsArray,其中Item类有3个属性即。 ItemName,价格和数量。 考虑我在itemsArray中添加了一个项目,例如Beer,我添加了Beer作为ItemName,4作为Quantity,200作为Price。 现在itemsArray的大小为1,因为里面有一个元素。 现在,下次当我再次添加相同价格和1作为数量的啤酒时,它应该仅通过修改它的数量来替换itemsArray中的现有项目(现在数量应该是4 + 1 = 5)。所以ArrayList中唯一的记录应该是(Beer,200,5)

public void getAddedItems(Items item){


          for (int i = 0; i < itemsArray.size(); i++) {
                if (item.ItemName == itemsArray.get(i).ItemName) {
                    int quant = itemsArray.get(i).quantity;
                    item.quantity = item.quantity + quant;
                    itemsArray.set(i,item);
                    isPresent=true;
                   // countSideList--;
                }
            }

          if(!isPresent) {
                itemsArray.add(countSideList, item);
                countSideList++;

          }



        adapter = new ItemsAdapter1(getActivity(),itemsArray);
        adapter.notifyDataSetChanged();
        list1.invalidateViews();
        list1.setAdapter(adapter);




    }
}

如果我使用此代码并考虑我给出的相同示例,它会存储数量为1的单个记录,但我希望数量为4 + 1 = 5;

2 个答案:

答案 0 :(得分:0)

如果你是谷歌ArrayList,它有删除(项目)和添加(项目)方法。 remove(item)将从列表中删除匹配项,并使用item.equals()完成比较。如果你实现item.equals()以匹配ItemName,那么你可以:

myList.remove(newItem);
myList.add(newItem);

如果没有现有项目,则删除可能会失败,但您不在乎。

警告:如果您在其他地方使用item.equals(),那么即使其他字段不同,它也会匹配,如果名称相同。即两个'啤酒'将始终相等。

答案 1 :(得分:0)

您可以改用HashMap。 HashMap维护唯一键,因此当您尝试使用相同的键添加数据时,它将覆盖现有键的值。在您的情况下,您可以使用它:

HashMap<String, CustomClass> map = new HashMap<String, CustomClass>();
map.put("Beer", yourCustomClassObj);
...
...
if(map.containsKey("Beer"))
{
  CustomClass obj = map.get("Beer");
  obj.quantity = obj.quantity+ newQty;
  map.put("Beer", obj);
}