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

注文番号で注文を見つけたら、注文したアイテムを見つけるにはどうすればよいですか? 私が今持っている唯一のリンクは orderitemshashmap に保存する ordernumber です。そのため、ある種の反復が必要であると想定し、一致を見つけて結果を返します。

私はこれをやってみましたが、すべての 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時間ぶっ通しで…

4

1 に答える 1

0

2 つの異なる を使用しないでくださいMap。1 つだけ使用してください。必要なのは、Orderすべての注文データ (注文の外で使用されることがほとんどないサブオーダーを含む) を保持するクラスを適切に定義し、Map<Integer,Order>

2 つの別個のマップを持つことを主張する場合、2 番目のマップは同じ ID を使用しListますが、サブオーダーの (順序付けしたいように見えます) を格納します。

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

コーディングを開始する前に少し立ち止まって、より適切なデータ構造を考えると、通常、後で多くの「地獄」を救うことができます。

于 2013-01-12T12:45:13.083 に答える