仅当arraylist中没有其他具有相同名称的项目时,如何添加项目?

Ric*_*rez 1 java arrays arraylist

如果项目与insertUniqueItem()方法中的arraylist中的其他项目名称不同,我将如何仅插入项目?

    public void insertUniqueItem()
    {

    }

    public static void main(String[] args)
    {
        ShoppingCart sc = new ShoppingCart();
        Item a = new Item("Kraft Cheese", 4, "\"Best Cheese in Town!\"");
        Item b = new Item("Bottle of Water", 2.50, "\"Refreshing Water!\"");

        sc.insertItem(a);
        sc.insertItem(b);

        sc.printInvoice();
        sc.insertUniqueItem();

        sc.print();

        DecimalFormat df = new DecimalFormat("#.00");

        System.out.println("Total Price: $" + df.format(sc.getTotal()));
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

我可能会使用一个LinkedHashMap<String, Item>代替,其中键是项目的名称.那样:

  • 你仍然可以保留订购
  • 您可以轻松有效地检查是否已存在给定项目名称的条目.

你有类似的东西:

if (!map.containsKey(item.getName()) {
    map.put(item.getName(), item);
}
Run Code Online (Sandbox Code Playgroud)

这仅适用于您希望所有项目在名称方面都是唯一的.如果你有时要允许重复的名称,有时没有,你可能想要的清单,然后你可以有这样的:

boolean containsItemName(ArrayList<Item> items, String name) {
    for (Item item : items) {
        if (item.getName().equals(name)) {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Java 8,则可以使用基于流的解决方案:

boolean containsItemName(ArrayList<Item> items, String name) {
    return items.stream().anyMatch(item -> item.getName().equals(name));
}
Run Code Online (Sandbox Code Playgroud)