返回最大元素

时间:2020-07-02 08:41:35

标签: java

我写了这个程序,可以计算订购的披萨数量。

我找不到如何返回列表中最大的元素(订单最多的披萨)。

我试过了,但是没用

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());
        }
}

2 个答案:

答案 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();
相关问题