首页 > 解决方案 > 使用可选包装器对多个条件执行 OR

问题描述

我正在尝试理解和使用 Java 8 - 可选功能。我想重构这个代码块。没有 Optional 我有这样的条件。

ClassA objA = findObject();
if(objA == null || objA.isDeleted()){
  throw Exception("Object is not found.");
}

我想使用可选包装器来转换这个块。我已阅读有关过滤器、ifPresent 函数的信息,但找不到方法。也许这很简单,但我是 Java 8 的新手。如果您能提供帮助,我将不胜感激。

标签: javajava-8optional

解决方案


您不应该使用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 和可用的方法。


推荐阅读