В объектно-ориентированном языке вы должны стремиться создать класс для инкапсуляции каждой важной концепции, используемой вашим приложением.Вы описали необходимость вести список заказов клиентов, так почему бы не создать новый класс с именем 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
может быть изменен, чтобы содержать дополнительные данные, относящиеся к определенному порядку, такие какитоговая цена, уникальный серийный номер заказа и т. д.
Предоставление конкретной концепции, например, отдельному заказу, своего собственного класса должно облегчить написание кода, его легче читать и намного проще поддерживать.