Diskuze: Reprezentace dat
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
No, jasné ale jde mi o
to, zda se i Map považuje za seznam, automatiky beru seznam jako List..
Případně mě napadlo, udělat list z párů <ingredience, množství>.
Ale pak následné funkce mají využívat jen stream API, takže potřebuju co
nejjednodušší řešení, aby s tím pak nebyli komplikace, ohledně těch
streamů... Jsem v tom naprostý zelenáč..
Aha, jo jasně, streamy na tom normálně fungují úplně stejně jako na Listech pokud vím.
Tak a už jsem narazil
na problém, mé "oblíbené" lambda výrazy
mám problém s tím, jak
vytáhnu pomocí map více informací
přesněji viz kod... Podaří se mi vypsat název suroviny
ale nejde mi už vypsat k tomu
měrnou jednotku(unit) a počet, který bude potřeba
Nějaký nápad, jak to
vytáhnout ?
Ingredient i = new Ingredient();
i.setName("maso");
i.setPrice(100);
i.setUnit("kg");
Map<Ingredient, Integer> recipe = new HashMap<>();
recipe.put(i, 10);
String temp = recipe.entrySet()
.stream()
.map(n -> n.getKey().getName())
.collect(Collectors.joining(", "));
System.out.println(temp);
Potřebuju to vrátit jako string právě, mám přepsat metodu toString()...
vyřešil jsem to takto
String temp;
temp = recipe.entrySet()
.stream()
.map(n -> n.getKey().getName() + " " + n.getValue().toString() + " " + n.getKey().getUnit())
.collect(Collectors.joining(" "));
bude s tím ještě hodně srandy
Můžu se ještě poptat, jak řešit nejdražší položku receptu ? Zatím to mám vyřešené takto
public Ingredient getTheMostExpensiveIngredient(){
Ingredient temp = recipe.entrySet()
.stream()
.max(Map.Entry.comparingByValue())
.get().getKey();
return temp;
}
ale tohle mi vrací položku, která je nejvíce drahá v receptu..
Nakonec jsem to vyřešil takto
public Ingredient getTheMostExpensiveIngredient(){
Map<Ingredient, Double> temp;
temp = recipe.entrySet()
.stream()
.collect(HashMap<Ingredient, Double>::new, (m,e) -> m.put(e.getKey(), e.getValue() * e.getKey().getPrice()), Map::putAll);
return temp.entrySet()
.stream()
.max(Map.Entry.comparingByValue())
.get().getKey();
}
Zobrazeno 11 zpráv z 11.