Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khác biệt giữa Optional.ifPresentOrElse() và Optional.or() trong Java 9

Cả hai phương thức Optional.ifPresentOrElse() và Optional.or() được giới thiệu trong Java 9 để cải thiện chức năng. Optional.ifPresentOrElse() kiểm tra nếu giá trị có mặt thì áp dụng hành động với giá trị, ngược lại thực hiện hành động rỗng; trong khi Optional.or() kiểm tra nếu giá trị có mặt thì trả về Optional chứa giá trị, ngược lại trả về Optional từ hàm Supplier. Optional.ifPresentOrElse() có hai tham số: Consumer và Runnable; Optional.or() chỉ có một tham số: Supplier.

Cú pháp 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());
    }
}

Kết quả

1 0 0 1

Cú pháp 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());
    }
}

Kết quả

Test1 Test2