如何匹配地图返回类型的键和值?

时间:2016-02-10 22:53:10

标签: java hashmap

我正在研究一种方法,其中 getOrdersForCustomer 方法的返回类型为Map<Integer, List<Order>>,并且每个customerId(地图的整数)需要在迭代时使用各自的订单订单清单。订单已与客户ID相关联。我最终得到了以下内容:

public Map<Integer, List<Order>> getOrdersForCustomer(Company company) {

    List<Order> orders = orderDao.findAll(company);
    Map<Integer, List<Order>> map = new HashMap<>();

    for(Order order: orders){

        int customerId = order.getCustomerId();
        if( map.get(customerId).size() ==0){

            map.put( customerId, new ArrayList<Order>());
        }

        else{

            map.get(customerId).add(order);
        }
    }

    return map; 
}

如何更正代码才能正常工作?

4 个答案:

答案 0 :(得分:2)

看起来好像第一个Order对象不会被添加到Map中的List中。我相信你应该总是在for的每次迭代中添加:

for(订单:订单) {         int customerId = order.getCustomerId();

c1 = MakeGUI(win1,win1x,win1y,"light blue")

答案 1 :(得分:1)

我假设你在这里得到NPE?

if( map.get(customerId).size() ==0){

执行:

if (!map.contains(customerId)) {

答案 2 :(得分:1)

您需要修复此项检查。如果customerId不在地图中,您将获得空指针异常。

 if( map.get(customerId).size() ==0) {
   map.put( customerId, new ArrayList<Order>());
  }

逻辑也不正确。您尚未将订单添加到您要添加的列表中。您可以将顺序添加到列表构造函数中,也可以删除else语句。

答案 3 :(得分:0)

是的,逻辑上有一个错误,我更正了@djechlin建议如下,

@Override
public Map<Integer, List<Order>> getOrdersForCustomer(Company company) {

    List<Order> orders = orderDao.findAll(company);
    Map<Integer, List<Order>> map = new HashMap<>();

    for(Order order: orders){

        int customerId = order.getCustomerId();
        if(!map.containsKey(customerId)){

            map.put(customerId, new ArrayList<Order>());
        }

        map.get(customerId).add(order);
    }

    return map; 
}