java - 在 Java 8 中使用 Optional.empty 默认 Optional orElse
问题描述
这里是 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();
推荐阅读
- scala - 将带有标题的空 DF 写入 csv
- python - 如何通过 Python 连接到 Azure SQL Server
- fluentd - 流利的本地时间适用于标准输出,但不适用于弹性搜索
- ios - 如何在我的 iphone 上使用我的 IOS 应用程序而无需协同设计?
- azure - 如何在 ADF 中获取自纪元以来的毫秒数
- firebase - firebase firestore 读取如何计算?
- python - 如何使用python根据相关统计进行最佳分组?
- python - 不能将序列乘以“float”类型的非整数(没有库的图像混合)
- python - 返回作为第二个参数传递的数组中第一个参数的索引的函数
- amazon-web-services - AWS Cognito 在将 istio sidecar 添加到 pod 后无法进行身份验证