Hogy lehetne ezt stream()-el megoldani? (Java)
A pizza osztálynak van egy totalPrice metódusa, ami visszatér a pizzaalap ára és a toppingok árainak összegével. Azonban a tanár a példametódust foreach ciklussal csinálta. A programot gyakorlásképpen kiegészítettem egy Order osztállyal, aminek van egy Pizza típusú listája, egy String megrendelőnév és egy String megrendelőcím mezője.
Az Order osztálynak van egy csináltam egy rendelésösszeg függvényt, aminek a feladata, hogy a megrendelésben lévő pizzák árainak összegével visszatérjen. Ezt a példa alapján simán meg tudtam csinálni for ciklussal, mivel ismerem a sorozatszámítás/összegzés programozási tételt, illetve a példakódban is volt egy más dolog összege. Viszont most, hogy C#-ból LINQ-t gyakorlunk már, java-ból pedig a stream() metódusok magabiztos használata lenne a cél, ezért szeretném azzal megcsinálni, de nem jövök rá, hogy kellene megírni.
Ellenben az adott címre rendelt pizzák listáját szerintem sikerült kigyűjtenem a lent látható függvénnyel, gondolom, az én problémámra is egy collect majd egy sum lesz a megoldás, de sajnos a konkrét kódot nem sikerült megírnom, pedig csak egy sor lenne. :D
public List<Pizza> getPizzasOfAddress(String address) {
return pizzas.stream().filter(p -> p.getOrdererAddress().equals(address)).collect(Collectors.toList());
}
Használhatod például a reduce-t
* [link]
Vagy a mapToInt-et amelyet szintén megtalálhatsz a fentebbi linken.
Érdemes lenne egy getter-t írnod a totalPrice propertyhez (ha még nincs: getTotalAmount), és akkor használhatod így:
pizzas.stream().mapToInt(Pizza::getTotalAmount).sum();
Köszi, remélem jó lesz.
return pizzas.stream().mapToInt(Pizza::totalPrice).sum();
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!