我正在开发一个类似于超市自助结账柜台的订单计划。在创建订单时,每个订单项都是一个对象,并保存在一个arraylist中 LineItem类有两个变量 - ItemID和ItemQuantity。方法,incQuantity用于将数量增加1。 我创建arraylist并向其添加lineItems没有问题,但是当遇到具有相同ItemID的其他项时,我无法调用incQuantity方法。 我使用get,remove和添加序列来更新对象。 在我看来,必须有一种方法可以直接访问对象并调用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);
}
答案 0 :(得分:1)
您不必删除重新添加它,只需获取该项并调用其方法:
orderSheet.get(0).incQuantity()
应该可以解决问题。
答案 1 :(得分:0)
我的建议是使用简单的Hashmap来解决这个问题。地图将简单地将项目ID作为键,将项目类别作为值。 item类还有一个增量计数器方法。 这样,您可以检查项目ID是否在地图上,如果是,则调用方法以增加计数。
答案 2 :(得分:0)
请看这个。我举一个例子来增加orderSheet中所有项目的数量。但我想你需要在调用incQuantity()时检查项目ID。
Iterator<LineItem> it = orderSheet.iterator();
while(it.hasNext()) {
it.next().incQuantity();
}