Java 9 中 Optional.ifPresentOrElse() 和 Optional.or() 方法之間的差異?


**Optional.ifPresentOrElse()** 和 **Optional.or()** 這兩個方法都在 Java 9 版本中引入,以改善其功能。**Optional.ifPresentOrElse()** 方法檢查值是否存在,如果有則使用該值執行操作,否則返回空操作;而 **Optional.or()** 方法檢查值是否存在,如果有,則返回包含該值的選項,否則返回應用於 Supplier 函式的 Option。**Optional.ifPresentOrElse()** 方法包含兩個引數,**Consumer **和 **Runnable **;而 **Optional.or()** 方法僅包含一個引數,**Supplier**。

Optional.ifPresentOrElse() 語法

public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)

示例

import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;

public class IfPresentOrElseMethodTest {
   public static void main(String args[]) {
      optionalIsPresent();
      optionalIsEmpty();
   }
   private static void optionalIsPresent() {
      Optional<String> optional = Optional.of("Test");
      AtomicInteger successCounter = new AtomicInteger();
      AtomicInteger emptyOptionalsCounter = new AtomicInteger();

      optional.ifPresentOrElse(x -> successCounter.incrementAndGet(), () ->       emptyOptionalsCounter.incrementAndGet());

      System.out.println(successCounter.get());
      System.out.println(emptyOptionalsCounter.get());
   }
   private static void optionalIsEmpty() {
      Optional optional = Optional.empty();
      AtomicInteger successCounter = new AtomicInteger();
      AtomicInteger emptyOptionalsCounter = new AtomicInteger();

      optional.ifPresentOrElse(x -> successCounter.incrementAndGet(), () -> emptyOptionalsCounter.incrementAndGet());

      System.out.println(successCounter.get());
      System.out.println(emptyOptionalsCounter.get())
   }
}

輸出

1
0
0
1


Optional.or() 語法

public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)

示例

import java.util.Optional;

public class OptionalOrMethodTest {
   public static void main(String args[]) {
      optionalIsPresent();
      optionalIsEmpty();
   }
   private static void optionalIsPresent() {
      Optional<String> optional1 = Optional.of("Test1");
      Optional<String> optional2 = Optional.of("Test2");

      Optional<String> optional3 = optional1.or(() -> optional2);
      System.out.println(optional3.get());
   }
   private static void optionalIsEmpty() {
      Optional<String> optional1 = Optional.empty();
      Optional<String> optional2 = Optional.of("Test2");

      Optional<String> optional3 = optional1.or(() -> optional2);
      System.out.println(optional3.get());
   }
}

輸出

Test1
Test2

更新日期: 2020 年 2 月 25 日

3K+ 次瀏覽

開始你的 職業生涯

透過完成課程獲得認證

開始吧
廣告