使用HashMap在Java中存储Customer订单

时间:2018-05-27 14:56:06

标签: java hashmap

我正在构建一个大约Fruit Shop的程序,我必须保存客户的订单列表,我使用HashMap<String, arrayList <Fruit> >字符串作为客户名称。现在,如果客户有很多订单,我怎样才能将其保存在Hash Map中?感谢

1 个答案:

答案 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类可以修改为包含属于特定订单的其他数据,例如总价,唯一订单序列号等。

给出一个特定的概念,例如特定的顺序,它应该使你的代码更容易编写,更容易阅读,更容易维护。