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
廣告