簡體   English   中英

如何使用 Optional 的 ifPresentOrElse 返回 boolean 值?

[英]How can I return a boolean value with Optional's 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
            }
    );

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

編輯:如果您只想進行無效檢查並返回boolean那么您可以簡單地使用Optional.ifPresent()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM