我正在研究一种方法,其中 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;
}
如何更正代码才能正常工作?
答案 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;
}