Используйте HashMap для хранения заказов клиента в Java - PullRequest
0 голосов
/ 27 мая 2018

Я создаю программу размером Fruit Магазин, и мне нужно сохранить список заказов клиентов, я использую строку HashMap<String, arrayList <Fruit> > для имени клиента.Теперь, если у клиента много заказов, как я могу сохранить его в Hash Map?Спасибо

1 Ответ

0 голосов
/ 27 мая 2018

В объектно-ориентированном языке вы должны стремиться создать класс для инкапсуляции каждой важной концепции, используемой вашим приложением.Вы описали необходимость вести список заказов клиентов, так почему бы не создать новый класс с именем Order, который содержит данные об одном заказе.На первый взгляд это может выглядеть так:

public class Order {
    private List<Fruit> basket;

    public void addFruitToOrder(Fruit fruit) {
        basket.add(fruit);
    }

    public List<Fruit> getBasket() {
        return basket;
    }
}

Теперь ваша карта от имени клиента до заказа может быть просто Map<String, List<Order>>, и у каждого клиента может быть столько заказов, сколько вам нужно.

Чтобы добавить заказ к имени клиента, которое может или не может быть ключевым в вашем Map, вы можете использовать метод computeIfAbsent:

mapFromNameToOrderList.computeIfAbsent(
        customerName, n -> new ArrayList<>(4)).
        add(latestOrder);

Метод computeIfAbsent будетвернуть существующий List<Order> для данного имени клиента, если такой список уже существует;если для данного имени клиента не существует списка, он создает новый список с использованием лямбда-выражения n -> new ArrayList<>(4).Таким образом, вы можете вызывать метод add, не беспокоясь о том, существует ли список.

Кроме того, ваш класс Order может быть изменен, чтобы содержать дополнительные данные, относящиеся к определенному порядку, такие какитоговая цена, уникальный серийный номер заказа и т. д.

Предоставление конкретной концепции, например, отдельному заказу, своего собственного класса должно облегчить написание кода, его легче читать и намного проще поддерживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...