在arraylist中访问和对象(java)
我正在做一个类似超市自助结账柜台的订单程序。创建订单时,每个行项目都是一个对象,并保存在arraylist中。在arraylist中访问和对象(java),java,arraylist,Java,Arraylist,我正在做一个类似超市自助结账柜台的订单程序。创建订单时,每个行项目都是一个对象,并保存在arraylist中。 LineItem类有两个变量-ItemID和ItemQuantity。incQuantity方法用于将数量增加1。 创建arraylist并向其中添加lineItems没有问题,但无法调用incQuantity方法,以便在遇到具有相同ItemID的其他项时使用。 我正在使用get、remove和add序列来更新对象。 在我看来,必须有一种方法可以直接访问对象并调用incQuantity
LineItem类有两个变量-ItemID和ItemQuantity。incQuantity方法用于将数量增加1。 创建arraylist并向其中添加lineItems没有问题,但无法调用incQuantity方法,以便在遇到具有相同ItemID的其他项时使用。 我正在使用get、remove和add序列来更新对象。 在我看来,必须有一种方法可以直接访问对象并调用incQuantity方法,而无需将其从arraylist中删除并再次添加。 请参阅下面的测试代码
public static class LineItem{
private String ItemID ;
private int ItemQuantity;
public LineItem(String ID) {
ItemID = ID;
ItemQuantity = 1; //upon first occurrence of an item, qty is initialized to 1
}
public void incQuantity() {
ItemQuantity++;
}
}
private static void TestItems() {
ArrayList <LineItem> orderSheet = new ArrayList<LineItem>();
LineItem newLine = new LineItem("12345");
orderSheet.add(newLine);
newLine = new LineItem("121233445");
orderSheet.add(newLine);
newLine = new LineItem("129767345");
orderSheet.add(newLine);
newLine = new LineItem("5454120345");
orderSheet.add(newLine);
newLine = new LineItem("0987123125");
orderSheet.add(newLine);
newLine = new LineItem("65561276345");
orderSheet.add(newLine);
// Increment Quantity of Element 0 below
LineItem updateLine = orderSheet.get(0);
updateLine.incQuantity();
orderSheet.remove(0);
orderSheet.add(updateLine);
}
公共静态类行项{
私有字符串ItemID;
私人物品数量;
公共行项目(字符串ID){
ItemID=ID;
ItemQuantity=1;//在项目第一次出现时,Quantity初始化为1
}
公共数量(){
ItemQuantity++;
}
}
私有静态void TestItems(){
ArrayList orderSheet=新建ArrayList();
LineItem newLine=新的LineItem(“12345”);
orderSheet.add(换行符);
换行符=新行项目(“121233445”);
orderSheet.add(换行符);
换行=新行项目(“129767345”);
orderSheet.add(换行符);
换行符=新行项目(“5454120345”);
orderSheet.add(换行符);
换行=新行项目(“0987123125”);
orderSheet.add(换行符);
换行=新行项目(“65561276345”);
orderSheet.add(换行符);
//以下元素0的增量数量
LineItem updateLine=orderSheet.get(0);
updateLine.incQuantity();
订单。删除(0);
orderSheet.add(updateLine);
}
您不必删除或重新添加项目,只需获取项目并调用其方法即可:
orderSheet.get(0).incQuantity()应该可以解决这个问题。我的建议是使用一个简单的Hashmap来解决这个问题。该映射将只包含作为键的项目id和作为值的项目类。
item类还将有一个增量计数器方法。
通过这种方式,您可以检查项目id是否在地图上,如果在地图上,则调用该方法以增加计数。请参见此。我举了一个增加订单中所有项目数量的例子。但是我认为您需要在调用incQuantity()时检查项目id
Iterator it=orderSheet.Iterator();
while(it.hasneat()){
it.next().incQuantity();
}
Iterator<LineItem> it = orderSheet.iterator();
while(it.hasNext()) {
it.next().incQuantity();
}