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

Cách lấy Stream từ Optional trong Java 9

Lớp Optional (giới thiệu Java 8) chứa giá trị non-null hoặc rỗng, giúp giảm NullPointerException. Java 9 bổ sung 3 phương thức: ifPresentOrElse(), or() và stream() – trong đó stream() chuyển Optional thành Stream (0 hoặc 1 phần tử).

Ví dụ minh họa

import java.util.Optional;
import java.util.stream.Stream;

public class OptionalTest {
    public static void main(String args[]) {
        getPerson().stream()
            .map(Person::getName)
            .map("Jai "::concat)
            .forEach(System.out::println);

        getEmptyPerson().stream()
            .map(Person::getName)
            .map("Jai "::concat)
            .forEach(System.out::println);
    }

    private static Optional<Person> getEmptyPerson() {
        return Optional.empty();
    }

    private static Optional<Person> getPerson() {
        return Optional.of(new Person("Adithya"));
    }

    static class Person {
        private String name;
        public Person(String name) { this.name = name; }
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
    }
}

Kết quả

Jai Adithya

Giải thích

  • getPerson() trả về Optional.of("Adithya") → stream() tạo Stream 1 phần tử → pipeline xử lý in ra Jai Adithya.
  • getEmptyPerson() trả về Optional.empty() → stream() tạo Stream rỗng → pipeline không in gì.

Ứng dụng thực tế

Kết hợp Optional với Stream API để xử lý đồng nhất cả trường hợp có giá trị và không có giá trị, tránh kiểm tra isPresent() rối rắm:

// Trước Java 9
if (opt.isPresent()) {
    process(opt.get());
}

// Java 9+
opt.stream().forEach(this::process);

Phương thức stream() làm cho Optional trở thành "first-class citizen" trong Stream pipeline.