我正在创建一个存储到arraylist的商品(商品键,数量和商品的价格)。如何仅更新数量而不是使用相同的Item键创建另一行。 以下是该程序的结果。
Java Book 1 £48.90
Samsung Galaxy S7 1 £639.50
Speakers 3 £59.80
Java Book 2 £48.90
Samsung Galaxy S7 2 £639.50
/////////////////////////////////////////////// ///
private void ItemsBasket(String name, int qty, String key) throws HeadlessException {
if (name == null) {
JOptionPane.showMessageDialog(null, "Please Selecet a key");
String imageFileName = "./images/" + key + ".png";
File imageFile = new File(imageFileName);
if (!imageFile.exists()) {
imageFileName = "./images/empty.png";
}
} else if (qty <= StockData.getQuantity(key)) {
arList.add(StockData.getName(key) + "\t\t " + qty + " " + pounds.format(StockData.getPrice(key)));
bagtotal += StockData.getPrice(key) * qty;
JOptionPane.showMessageDialog(null, "Sucessfully added to the basket");
} else {
JOptionPane.showMessageDialog(null, "Insuffcient stock");
JOptionPane.showMessageDialog(null, "Available items qty : " + "**" + StockData.getQuantity(key) + "**");
}
}
答案 0 :(得分:5)
创建StockData
对象并将其直接添加到ArrayList<StockData>
public class StockData{
String name;
int qty;
double price;
public StockData(String n, int q, double p){
// Initialization
}
}
然后,使用setter,您可以修改List
arList.get(index).setName("NewName");
答案 1 :(得分:0)
考虑不使用ArrayList<String>
,而是使用更专业的结构。
@YassinHajaj的StockData
对象是一个好的开始(但我会使用更具描述性的BasketItem
。
但是java让我们做得更好:你可以使用Map
Map<String, BasketItem> basket = new HashMap<String, BasketItem>()
。
这样您就可以创建updateBasketItem方法:
private void addToOrUpdateBasketItem(String key, int qty) {
BasketItem item = basket.getKey(key);
if (item == null){
item = new BasketItem(StockData.getName(key), qty, pounds.format(StockData.getPrice(key)));
basket.put(key, item);
} else {
item.increaseWithQuantity(qty);
}
}