-1

我有一个用于订单的哈希图和另一个用于订单项的哈希图。将数据放入哈希图中的方法如下执行:

    // THIS ONE ADDS THE ORDERS
    // (int orderNumber, String Datum, String salesperson, int customernumber)
    mainController.addBestallning(500, "2012/01/01", "Hendrik Gustafsson", 1001);

    // THIS ONE ADDS THE ORDERED ITEMS
    // (int orderNumber, int linePos, Artikel product, int amount, double price)
    mainController.addBestallningsOrderRad(500, 1, mainController.getAllaArtiklar().get(101), 5, 100.00);

通过订单号找到订单后,如何找到已订购的商品?我现在唯一的链接是 ordernumber,我保存在 orderitemshashmap 中,所以我假设需要进行某种迭代,找到匹配项并返回结果。

我尝试这样做并让它工作,但前提是所有订单项位置也是唯一的。

所以,如果我要添加另一个这样的订单:

mainController.addBestallning(501, "2011/05/02", "Sven Karmageddon", 1002);            
mainController.addBestallningsOrderRad(501, 1, mainController.getAllaArtiklar().get(101), 5, 100.00);

我找不到订单 501 的订单项。

这是我到目前为止所尝试的。制作了一种查找客户所有订单的方法:

public HashMap<Integer, Bestallning> getAllaKundOrdrar() {
    HashMap<Integer, Bestallning> allaKundOrderHashMap = new HashMap<>();
    //iterate through all orders
    //find the ones which belong to customerid
    //place them in allaKundOrderHashMap
    //return allaKundOrderHashMap
Iterator iter = tmpBestallningsregister.getAllaBestallningar().keySet().iterator();
while (iter.hasNext()) {
    Integer key = (Integer) iter.next();
    //String value = (String) controller.getAllaKunder().get(key).getKundNamn();              
    if ((customerNrToFindOrdersFor) == getAllaBestallningar().get(key).getKundNr()) {
        //found an order for this customer, putting it in the hashmap                
        allaKundOrderHashMap.put(key, getAllaBestallningar().get(key));
    }
}
return allaKundOrderHashMap;
}

一种从所有客户那里查找所有已订购商品的方法(我知道,像这样搜索是 100% 错误)并获取属于特定订单的商品:

    //RETURN OF ORDERRADERS HASHMAP FOR SPECIFIC ORDER VIA ORDERREGISTER
public HashMap<Integer, BestallningsOrderRad> getAllaBestallningsBestallningsOrderRader() {
    HashMap<Integer, BestallningsOrderRad> allaBestallningsOrderRaderHashMap = new HashMap<>();
    //iterate through all orderrader
    //find the ones which belong to orderid
    //place them in allaKundOrderRaderHashMap
    //return allaKundOrderRaderHashMap                       

    Iterator iter = tmpBestallningsregister.getAllaBestallningsOrderRader().keySet().iterator();
    while (iter.hasNext()) {
        Integer key = (Integer) iter.next();         

        if ((orderNrToFindOrderRaderFor) == tmpBestallningsregister.getAllaBestallningsOrderRader().get(key).getBestallningsNr()) {                
            //found an orderrad for this order, putting it in the hashmap
            //allaBestallningsOrderRaderHashMap.put(key, getAllaBestallningsOrderRader().get(key));
            allaBestallningsOrderRaderHashMap.put(key, getAllaBestallningsOrderRader().get(key));                
        }
    }
    return allaBestallningsOrderRaderHashMap;
}

有人愿意告诉我我做错了什么吗?我已经连续20个小时了...

4

1 回答 1

0

不要使用两个不同Map的,而只使用一个。您需要正确定义一个Order包含所有订单数据的类(包括在订单之外很少使用的子订单)并仅使用Map<Integer,Order>

如果您坚持拥有两个单独的地图,则第二个使用相同的 id 但存储一个List(看起来像您想要订购的)子订单。

private Map<Integer, Order> orders;
private Map<Integer, List<SubOrder> suborders;

在开始编码之前停下来思考更合适的数据结构通常会在以后为您节省很多“地狱”。

于 2013-01-12T12:45:13.083 回答