首页 > 解决方案 > 如何使用 Optional 的 ifPresentOrElse 返回布尔值?

问题描述

我已经有一段时间没有与 Optional 联系了,但我有一个问题。

如何使用 Optional 转换下面的 if else 语句?由于 ifPresentOrElse 没有返回任何内容,因此它似乎无法返回 true 或 false。

有什么办法吗?或者像以前一样使用 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
            }
    );

标签: javajava-8optional

解决方案


如果你得到一个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();
}

推荐阅读