java - 使用可选包装器对多个条件执行 OR
问题描述
我正在尝试理解和使用 Java 8 - 可选功能。我想重构这个代码块。没有 Optional 我有这样的条件。
ClassA objA = findObject();
if(objA == null || objA.isDeleted()){
throw Exception("Object is not found.");
}
我想使用可选包装器来转换这个块。我已阅读有关过滤器、ifPresent 函数的信息,但找不到方法。也许这很简单,但我是 Java 8 的新手。如果您能提供帮助,我将不胜感激。
解决方案
您不应该使用Optional<T>
单独替换该if
语句,因为它并没有更好并且不会为您带来任何好处。一个更好的解决方案是让findObject()
方法返回Optional<ClassA>
。
这使得该方法的调用者决定在“无价值”情况下要做什么。
假设您已进行此更改,则可以利用该Optional<T>
类型:
findObject().filter(a -> !a.isDeleted()) // if not deleted then do something
.map(...) // do some mapping maybe?
... // do some additional logic
.orElseThrow(() -> new Exception("Object is not found."));//if object not found then throw exception
查看Optional<T>
课程以熟悉 API 和可用的方法。
推荐阅读
- shell - uDeploy,在switch中引用shell变量
- pytorch - Pytorch 数据集中无法打开共享文件映射错误
- html - 带引导程序的离线 PWA 视图
- keycloak - Keycloak 自定义用户存储提供程序(分配的角色集/有效角色为空)
- github - egit.core:如何以编程方式修改文件
- html - 如何在不更改当前 URL 的情况下发出 html 请求?
- arrays - 使用顶级数据在 Swift 中解码对结构数组的 JSON 响应
- python - 如何按顺序获取数字的起点并处理错误情况?
- git - 将最新提交的更改添加到过去的提交
- tensorflow - Tensorlow - 请破译 tf.where 文件的内容