Lớp Optional cung cấp container có thể chứa hoặc không chứa giá trị non-null. Optional class giới thiệu trong Java 8 để giảm số nơi trong code có thể sinh NullPointerException. Java 9 thêm 3 phương thức mới vào Optional class: or(), ifPresentOrElse() và stream() giúp xử lý giá trị mặc định (default values).
Optional.or()
Phương thức or() giới thiệu trong Java 9, tham số là functional interface Supplier. Luôn trả về đối tượng Optional không rỗng. Nếu Optional object không rỗng, trả về chính nó. Ngược lại, trả về Optional object do Supplier tạo.
Ví dụ
import java.io.IOException;
import java.util.Optional;
public class OptionalOrMethodTest {
public static void main(String[] args) throws IOException {
String str = null;
Optional<String> opt = Optional.ofNullable(str);
Optional<String> result = opt.or(() -> Optional.of("Adithya"));
System.out.println(result);
}
}
Kết quả
Optional[Adithya]
Optional.ifPresentOrElse()
Phương thức ifPresentOrElse() giới thiệu trong Java 9. Tương tự ifPresent() nhưng thêm tham số Runnable. Nếu Optional object rỗng, object của interface Runnable được thực thi.
Ví dụ
import java.util.Optional;
public class OptionalIfPresentOrElseTest {
public static void main(String[] args) {
String str = null;
Optional<String> opt = Optional.ofNullable(str);
opt.ifPresentOrElse(
x -> System.out.println(x),
() -> System.out.println("No value"));
}
}
Kết quả
No value
Optional.stream()
Phương thức Optional.stream() hỗ trợ từ Java 9. Dùng để tạo stream object mới từ Optional object. Nếu Optional chứa giá trị, trả về stream object chứa giá trị đó.
Ví dụ
import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
public class OptionalStreamMethodTest {
public static void main(String[] args) throws IOException {
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);
}
}
Kết quả
Jai Adithya