0

what is the difference b/w these 2 ways of finding a max calorie dish from the menu list?

List<Dish> menu = Arrays.asList( new Dish("pork", false, 800, Dish.Type.MEAT),
            new Dish("beef", false, 700, Dish.Type.MEAT),
            new Dish("chicken", false, 400, Dish.Type.MEAT),
            new Dish("french fries", true, 530, Dish.Type.OTHER),
            new Dish("rice", true, 350, Dish.Type.OTHER),
            new Dish("season fruit", true, 120, Dish.Type.OTHER),
            new Dish("pizza", true, 550, Dish.Type.OTHER),
            new Dish("prawns", false, 400, Dish.Type.FISH),
            new Dish("salmon", false, 450, Dish.Type.FISH));

Optional<Dish> maxCalorieDish = menu.stream()
                .max((c1,c2) -> c1.getCalories().compareTo(c2.getCalories()));
        System.out.println(maxCalorieDish);
   
    Optional<Dish> maxCalorieDish1 = menu.stream()
            .collect(maxBy((c1,c2) -> c1.getCalories().compareTo(c2.getCalories())));
    System.out.println(maxCalorieDish1);
sai23
  • 65
  • 1
  • 8
  • 1
    No difference except that you're keeping a dog and barking yourself. Use `max()`. It already works, and you don't have to test it. – user207421 Aug 11 '21 at 22:47

1 Answers1

0

I would say readability, mostly if you use this grammar:

menu.stream().max(Comparator::comparing(Dish::getCalories));

I can find also this question pretty similar

Alberto Sinigaglia
  • 12,097
  • 2
  • 20
  • 48