Es gibt eine Hashmap (o), die String als Schlüssel und Order Object als Wert verwendet. Bestellung hat eine Arraylist von OrderLines. Hier muss ich der Karte mehrere Befehle hinzufügen. Das Problem ist, dass meine hashmap eindeutige erste und zweite Schlüssel (Auftrag 1 und Auftrag 2) ausgibt, aber der zuletzt eingefügte Wert als Wert für beide Schlüssel (doppelte Reihenfolge in allen Einträgen). Können Sie mir bitte helfen, das Problem zu beheben?Doppelte Werteinfügung in Hashmap
Hauptklasse:
Map<String, Order> o = new HashMap<String, Order>();
Order c = new Order();
c.add(new OrderLine(new Item("book", (float) 12.49), 1));
c.add(new OrderLine(new Item("music CD", (float) 14.99), 1));
o.put("Order 1", c);
// Reuse cart for an other order
c.clearCart(); // this.orderLines.clear() in the order class
c.add(new OrderLine(new Item("imported box of chocolate", 10), 1));
c.add(new OrderLine(new Item("imported bottle of perfume", (float) 47.50), 1));
o.put("Order 2", c);
for (Map.Entry<String, Order> entry : o.entrySet()) {
System.out.println("*******" + entry.getKey() + entry.getValue().get(0).getItem().getDescription() + "*******");
}
Order-Klasse:
class Order {
private List<OrderLine> orderLines = new ArrayList<>();
public void add(OrderLine o) throws Exception {
orderLines.add(o);
}
public OrderLine get(int i) {
return orderLines.get(i);
}
public void clearCart() {
this.orderLines.clear();
}
}
Orderline-Klasse:
private int quantity;
private Item item;
public OrderLine(Item item, int quantity) throws Exception {
if (item == null) {
System.err.println("ERROR - Item is NULL");
throw new Exception("Item is NULL");
}
assert quantity > 0;
this.item = item;
this.quantity = quantity;
}
public Item getItem() {
return item;
}
public int getQuantity() {
return quantity;
}
}
Item-Klasse:
class Item {
private String description;
private float price;
public Item(String description, float price) {
super();
this.description = description;
this.price = price;
}
public String getDescription() {
return description;
}
public float getPrice() {
return price;
}
}
wo ist OrderLine-Klasse. So funktioniert dein Code. Veröffentlichen Sie den gesamten Code, ich werde vorschlagen, zu beheben. Sieht aus wie c.clearCart() ist nicht in der Lage, Warenkorb zu löschen – JavaHopper
Hinzugefügt den ganzen Code –
Wie bekommen Sie 'entry.getValue(). Get (0)' bei der SOP in der for-Schleife in der Hauptklasse? –