Помощ за задача 4 от Maps, Lampda and Stream API
Може ли някой да ми помогне с тази задача:
4. Orders
Write a program, which keeps information about products and their prices. Each product has a name, a price and its
quantity. If the product doesn’t exist yet, add it with its starting quantity.
If you receive a product, which already exists increase its quantity by the input quantity and if its price is different,
replace the price as well.
You will receive products’ names, prices and quantities on new lines. Until you receive the command "buy", keep
adding items. When you do receive the command "buy", print the items with their names and total price of all the
products with that name.
Опитах да я рша така:
public class Orders { public static void main(String[] args) { Scanner sc = new Scanner(System.in); HashMap<String,HashMap<Double,Integer>> list = new HashMap<String,HashMap<Double, Integer>>(); String input = ""; while(!"buy".equals(input)){ String[] data = sc.nextLine().split(" "); String product = data[0]; double price = Double.parseDouble(data[1]); int quantity = Integer.parseInt(data[2]); if(!list.containsKey(product)){ list.put(product, new HashMap<Double,Integer>()); list.get(product).put(price,quantity); }else{ но не зная как да достъпя и манипулирам вътршният Map.
Ако някой знае как или има готво решение ще съм много благодарен ако го сподели.
Благодаря предварително.
Благодаря, това е добра идея. Не се бях сетил.
По-добър вариант е. Ето и решение с вложен ама много се усложнява за тая проста задача.
https://pastebin.com/Wty82k6m
Мерси. Успях да я реша с два Map-a, всъщност с три, направих един за резултата, иначе не мога да го принтирам.
Благодаря още веднъж, много ми помогна.
За принтирането направи един цикъл
for(Map.Entry<String, Integer> entry : (името на мапа с интегера).entrySet()) {
print entry.getKey() " -> " ;
print entry.getValue * (името на мапа с Double).get(entry.getKey)
Или пък ги слей в един мап и принтирай накрая.