Computer >> Máy Tính >  >> Lập trình >> Java

Sự khác biệt giữa các phương thức Optional.ifPresentOrElse () và Optional.or () trong Java 9?

Cả Optional.ifPresentOrElse () Optional.or () các phương pháp đã được giới thiệu trong phiên bản Java 9 để cải thiện chức năng của nó. Optional.ifPresentOrElse () phương thức kiểm tra xem giá trị có xuất hiện hay không, áp dụng hành động với giá trị, nếu không sẽ trả về hành động trống trong khi Optional.or () phương thức kiểm tra xem giá trị có xuất hiện hay không, tùy chọn trả về có chứa giá trị, nếu không trả về Tùy chọn áp dụng cho chức năng của Nhà cung cấp. Optional.ifPresentOrElse () phương thức chứa hai tham số, Người tiêu dùng Runnable trong khi Optional.or () phương thức chỉ chứa một tham số, Nhà cung cấp .

Cú pháp của Optional.ifPresentOrElse ():

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

Ví dụ

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())
   }
}

Đầu ra

1
0
0
1


Cú pháp của Optional.or ():

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

Ví dụ

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());
   }
}

Đầu ra

Test1
Test2