Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java 9의 Optional.ifPresentOrElse() 및 Optional.or() 메서드의 차이점은 무엇입니까?

<시간/>

Optional.ifPresentOrElse() 둘 다 및 Optional.or() 메소드는 기능을 개선하기 위해 Java 9 버전에 도입되었습니다. Optional.ifPresentOrElse() 메소드는 값이 있는지 확인하고 값이 있는 작업을 적용하고 그렇지 않으면 빈 작업을 반환하는 반면 Optional.or() 메소드는 값이 존재하는지 확인하고, 리턴 옵션에 값이 포함되며, 그렇지 않으면 return Optional이 Supplier 기능에 적용됩니다. Optional.ifPresentOrElse() 메소드에는 소비자 라는 두 개의 매개변수가 있습니다. 및 실행 가능 반면 Optional.or() 메소드에는 공급자라는 매개변수가 하나만 있습니다. .

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