gpt4 book ai didi

java-8 - Java 8 - 如何在 java 8 中进行过滤以从不同类别的菜肴类型中获取结果?

转载 作者:行者123 更新时间:2023-12-01 13:27:39 26 4
gpt4 key购买 nike

我是 Java 8 的新手,希望在这里做一些有趣的事情。实际上是想从每个 Dish.Type 中获取最高热量的菜肴

我在下面尝试了一些东西,但它给了我 Dish.Type.

的所有值
@Builder
@Data
@AllArgsConstructor
public class Dish {
public enum Type { MEAT, FISH, OTHER }

private final String name;
private final boolean vegetarian;
private final int calories;
private final Type type;

public static final 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));
}

希望获得结果 - 从每种不同的菜肴类型中获得最高热量的菜肴。

我在下面尝试过,但给出了同一菜肴类型的所有元素。有什么指点吗?

List<Dish> truncatingStream = Dish.menu.stream().filter(d -> d.getCalories() > 300).limit(3).collect(toList());
truncatingStream.forEach(System.out::println);

最佳答案

  Map<Type, Dish> map = menu.stream()
.collect(Collectors.toMap(
Dish::getType,
Function.identity(),
BinaryOperator.maxBy(Comparator.comparing(Dish::getCalories))));

您需要收集到一个 Map,其中键是 Type,值是 Dish。当您遇到两个相同类型的菜肴时 - 您合并它们或者根据Comparator.comparing( Dish::getCalories)) - 意思是卡路里最多的那个。这是什么:

 BinaryOperator.maxBy(Comparator.comparing(Dish::getCalories)))

合并正在做。

关于java-8 - Java 8 - 如何在 java 8 中进行过滤以从不同类别的菜肴类型中获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52683507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com