2013-01-12 40 views
-1

我有訂單的散列圖,另一個訂購項目。是這樣執行的,其將數據輸入的包含HashMap的方法:通過搜索鏈接兩個hashmaps還是有更好的方法嗎?

// 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); 

一旦我找到它的訂單編號的順序,我怎麼找ordereditems? 我現在唯一的鏈接是訂單號,我保存在orderitemshashmap中,所以我假設需要進行某種迭代,找到匹配並返回結果。

我試過這樣做,並得到它的工作,但只有在所有orderitem位置都是唯一的條件下。

所以,如果我是添加另一個這樣的順序:

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

我找不到的OrderItems訂單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%錯誤的搜索這樣的,我知道)所有ordereditems並獲得那些beloning以特定的順序:

//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

不要使用兩個不同的Map,但只有一個。你需要的是正確定義一個包含所有訂單數據的類(包括在訂單外很少使用的子訂單),並使用Map<Integer,Order>

如果你堅持有兩個單獨的地圖,第二個使用相同的ID,但存儲List(它看起來像你想要它訂購)的子訂單。

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

開始代碼和思維更appropiate數據結構通常會爲以後節省你很多「地獄」之前,停止片刻。

+0

我們被迫使用一個單獨的類,它保存訂購物品和訂購數量的信息。 – JavaNewb

+0

您將如何定義訂單類,以便它可以保留多個訂購的產品?我可以考慮一個屬性類型String,您可以在其中設置訂購商品partnumber,但訂單的一個實例只能存儲1個此類商品。 – JavaNewb

+0

'java.util.List'總是有序的。 – SJuan76

相關問題