我写了这个程序,可以计算订购的披萨数量。
我找不到如何返回列表中最大的元素(订单最多的披萨)。
我试过了,但是没用
return order.stream().max(Comparator.comparing(norder::pizza)).get();
public class PizzaCount {
private ArrayList<String> order;
private String[] menu;
public PizzaCount(String[] pizzas) {
this.menu = pizzas;
this.order = new ArrayList<>();
}
public int norder(String pizza) {
int number=0;
for(String pizzaOrdered : this.order){
if(pizza(pizzaOrdered)){
number++;
}
}
return number;
}
public String pizzamax() {
/*stuck here*/
}
public static void main(String[] args) {
String [] menu = {"romana", "funghi"};
PizzaCount n = new PizzaCount(menu);
n.add("romana");
n.add("romana");
n.add("funghi");
System.out.println("number of romana: "+ n.norder("romana"));
System.out.println("number of funghi: "+ n.norder("funghi"));
System.out.println("the pizza with the maximum order is: "+ n.pizzamax());
}
}
答案 0 :(得分:3)
首先,您需要计算每个比萨饼的订单数量(您可以创建一个地图,以订单金额作为值,并以比萨饼名称为键),然后,您可以找到该数量的最大值。如果要使用流API进行操作,它将看起来像这样。
order.stream().collect(Collectors.groupingBy(s -> s, Collectors.counting()))
.entrySet()
.stream()
.max(Comparator.comparing(Map.Entry::getValue))
.map(Map.Entry::getKey)
.get();
答案 1 :(得分:2)
如果我对您的理解正确,则可以尝试
order.stream().max(Comparator.comparing(this::norder)).get();