我正在构建一个大约Fruit
Shop的程序,我必须保存客户的订单列表,我使用HashMap<String, arrayList <Fruit> >
字符串作为客户名称。现在,如果客户有很多订单,我怎样才能将其保存在Hash Map中?感谢
答案 0 :(得分:1)
在面向对象语言中,您应该创建一个类来封装应用程序使用的每个重要概念。您已经描述了保留客户订单列表的必要性,因此为什么不创建一个名为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>
;如果给定客户名称不存在任何列表,则它将使用lambda表达式n -> new ArrayList<>(4)
创建新的List。这样,您可以调用方法add
,而无需担心列表是否已存在。
此外,您的Order
类可以修改为包含属于特定订单的其他数据,例如总价,唯一订单序列号等。
给出一个特定的概念,例如特定的顺序,它应该使你的代码更容易编写,更容易阅读,更容易维护。