我可以从中获取流API吗?
public String getTheMostExpensiveIngredient() {
double help = 0.0;
List<String> result = new ArrayList<>();
for(Map.Entry<Ingredient, Double> x : list.entrySet()) {
if((x.getKey().getPrice() * x.getValue() > help )) {
help = x.getKey().getPrice() * x.getValue();
result.add(x.getKey().getName());
}
}
return result.get(result.size()-1);
}
答案 0 :(得分:3)
据我所知,你只是在寻找max元素的名称。您不修改任何状态。或者你不必。使用流可以做
String getTheMostExpensiveIngredient(Map<Ingredient, Double> map) {
return map.entrySet().stream() // Stream<Map.Entry<Ingredient, Double>>
.max(Comparator.comparingDouble(
e -> e.getValue() * e.getKey().getPrice())) // Optional<Map.Entry<..>>
.map(e -> e.getKey().getName()) // Optional<String>
.orElse(null); // just String
}
Stream.max
方法获取最大条目。“棘手”部分是告诉流api如何定义最大值。它期望地图条目Comparator
。这由Comparator.comparingDouble(value * price function)
处理。它将每个条目映射到某个值,以便进行比较。