如何更新包含多个值的arrayList?

时间:2016-03-11 21:19:34

标签: java arraylist

我正在创建一个存储到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) + "**");

        }
    }

2 个答案:

答案 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);
    }
}