如何使用 Optional 的 ifPresentOrElse return 布尔值?

How can I return a boolean value with Optional's ifPresentOrElse?

有段时间没接触Optional了,有一个疑问

如何使用 Optional 转换下面的 if else 语句?由于 ifPresentOrElse 没有 return 任何东西,它似乎不能 return 真或假。

有什么办法吗?或者像以前一样使用 if else 语句是否正确?

// Using if else statement
if (obj != null) {
    // someting to do
    return true;
} else {
    // someting to do
    return false;
}

// Using Optional
Optional.ofNullable(obj)
    .ifPresentOrElse(
            val -> {
                // if obj is not null
                // someting to do
                // return true
            }
            , () -> {
                // if obj is null
                // someting to do
                // return false
            }
    );

如果给你一个Optional,就去做

return optional.isPresent();

否则没有理由使用Optional:

return obj != null;

如果你也想要副作用,你可以这样做:

public static void main(String[] args) {
    Optional<String> present = Optional.ofNullable("Data");
    Optional<String> absent  = Optional.empty();
    
    System.out.printf("Value was %s\n", doSomething(present)? "present" : "absent");
    System.out.printf("Value was %s\n", doSomething(absent)? "present" : "absent");
}
    
public static boolean doSomething(Optional<String> opt)
{
    opt.ifPresentOrElse(
            v -> { System.out.printf("value is '%s'\n",v); }, 
            ()-> { System.out.println("value is absent");  }
    );
    return opt.isPresent();
}

我认为您正试图在无效检查后执行一些代码。你可以简单地做, `

 Optional.ofNullable(obj)
         .map(o -> o.doOnNotNull(o))
         .orElseGet(() -> doOnNull())

编辑:如果你只想做无效检查和 return boolean 那么你可以简单地使用 Optional.ifPresent()