通过搜索链接两个哈希映射还是有更好的方法?

时间:2013-01-12 12:30:53

标签: java hashmap

我有订单的hashmap和orderitems的另一个。将数据放入哈希映射的方法如下所示:

    // 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中,所以我假设需要进行某种迭代,找到匹配并返回结果。

我尝试这样做并让它发挥作用,但条件是所有的orderitem位置也是唯一的。

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

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个小时了......

1 个答案:

答案 0 :(得分:0)

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

如果您坚持使用两个单独的地图,则第二个使用相同的ID,但会存储子订单的private Map<Integer, Order> orders; private Map<Integer, List<SubOrder> suborders; (看起来您想要订购)。

{{1}}

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