Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่าง Optional.ifPresentOrElse() และ Optional.or() ใน Java 9

ภาพรวม

Java 9 เพิ่มเมธอดใหม่ให้ Optional คือ ifPresentOrElse() และ or() เพื่อเพิ่มความสามารถในการจัดการค่าที่อาจเป็น null

Optional.ifPresentOrElse()

วัตถุประสงค์: ถ้ามีค่า -> รัน action, ไม่มีค่า -> รัน emptyAction

Syntax

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

ตัวอย่าง

Optional<String> optional = Optional.of("Test");
AtomicInteger success = new AtomicInteger();
AtomicInteger empty = new AtomicInteger();
optional.ifPresentOrElse(
    x -> success.incrementAndGet(),
    () -> empty.incrementAndGet()
);
// success=1, empty=0

Optional emptyOpt = Optional.empty();
emptyOpt.ifPresentOrElse(
    x -> success.incrementAndGet(),
    () -> empty.incrementAndGet()
);
// success=0, empty=1

Optional.or()

วัตถุประสงค์: ถ้ามีค่า -> คืน Optional นั้น, ไม่มีค่า -> คืน Optional จาก Supplier

Syntax

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

ตัวอย่าง

Optional<String> opt1 = Optional.of("Test1");
Optional<String> opt2 = Optional.of("Test2");
Optional<String> result = opt1.or(() -> opt2); // "Test1"

Optional<String> empty = Optional.empty();
Optional<String> result2 = empty.or(() -> opt2); // "Test2"

ตารางเปรียบเทียบ

คุณสมบัติifPresentOrElse()or()
พารามิเตอร์Consumer + Runnable (2 ตัว)Supplier (1 ตัว)
คืนค่าvoid (ทำ side effect)Optional<T>
ใช้เมื่อต้องการรัน logic ทั้ง 2 กรณีต้องการ Optional สำรอง (fallback)

สรุป

  • ifPresentOrElse ใช้สำหรับ branching logic (ทำอย่างนี้ถ้ามีค่า, ทำอย่างนั้นถ้าไม่มี)
  • or ใช้สำหรับ提供 fallback Optional เมื่อค่าเป็น empty