gpt4 book ai didi

java - 在 Java 8 中使用Optional.empty 默认可选 orElse

转载 作者:行者123 更新时间:2023-12-02 04:03:02 25 4
gpt4 key购买 nike

这里是 Java 8。我需要在两个 POJO 列表中搜索一个字符串,并希望正确使用 Stream/Optional API。

如果该名称出现在第一个列表中(“lunches”),那么我想返回包含它的可选值。否则,如果该名称出现在第二个列表中(“dinners”),那么我想返回包含它的可选值。否则,如果两个列表中都不存在该名称,我想返回 Optional.empty() 。迄今为止我最好的尝试:

public class Restaurant {

private String id;
private String name;
private List<Food> lunches;
private List<Food> dinners;

public Optional<Food> findFoodByName(String name) {

return Optional.of(lunches.stream()
.filter(food -> food.getName()
.equalsIgnoreCase(name))
.findFirst())
.orElse(dinners.stream()
.filter(food -> food.getName()
.equalsIgnoreCase(name))
.findFirst());
// .orElse(null); TODO: how to return empty optional if neither in 'lunches' nor 'dinners'?

}

}

有人能帮我冲过终点线吗?

最佳答案

使用Stream.of组合两个列表并检查元素或返回Optional.empty()

Stream.of(lunches, dinners)
.flatMap(List::stream)
.filter(s -> s.getName()
.equalsIgnoreCase(name))
.findFirst();

根据@Holger的建议,您还可以使用Stream.concat来连接两个流,然后检查元素

Stream.concat(lunches.stream(), dinners.stream())
.filter(s -> s.getName()
.equalsIgnoreCase(name))
.findFirst();

关于java - 在 Java 8 中使用Optional.empty 默认可选 orElse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59868321/

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