Optional Class Enhancements ใน Java 9
Java 9 เพิ่ม 3 เมธอดให้ Optional: or(), ifPresentOrElse(), stream()
1. Optional.or()
พฤติกรรม: ถ้ามีค่า -> คืน Optional นั้น, ไม่มีค่า -> คืน Optional จาก Supplier
Syntax
public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)
ตัวอย่าง
Optional<String> opt = Optional.ofNullable(null);
Optional<String> result = opt.or(() -> Optional.of("Adithya"));
System.out.println(result); // Optional[Adithya]
2. Optional.ifPresentOrElse()
พฤติกรรม: เหมือน ifPresent() แต่เพิ่ม Runnable สำหรับกรณี empty
Syntax
public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
ตัวอย่าง
Optional<String> opt = Optional.ofNullable(null);
opt.ifPresentOrElse(
x -> System.out.println(x),
() -> System.out.println("No value")
);
// Output: No value
3. Optional.stream()
พฤติกรรม: แปลง Optional เป็น Stream (1 element หรือ empty)
Syntax
public Stream<T> stream()
ตัวอย่าง
List<Optional<String>> list = List.of(
Optional.of("Jai"),
Optional.empty(),
Optional.of("Adithya")
);
Stream<String> stream = list.stream().flatMap(Optional::stream);
stream.forEach(System.out::println);
// Output: Jai Adithya
สรุป
| Method | Return Type | ใช้เมื่อ |
|---|---|---|
| or() | Optional<T> | ต้องการ fallback Optional |
| ifPresentOrElse() | void | ต้องการ action ทั้ง 2 กรณี |
| stream() | Stream<T> | ต้องการแปลงเป็น Stream pipeline |
เมธอดเหล่านี้ทำให้ Optional ใช้งานได้ยืดหยุ่นและ expressive มากขึ้น