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.