Optional.ifPresentOrElse()
Obsłuż oba przypadki — obecny i pusty — Optional w jednym wywołaniu.
Porównanie kodu
✕ Java 8
Optional<User> user = findUser(id);
if (user.isPresent()) {
greet(user.get());
} else {
handleMissing();
}
✓ Java 9+
findUser(id).ifPresentOrElse(
this::greet,
this::handleMissing
);
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Jedno wyrażenie
Oba przypadki obsłużone w jednym wywołaniu metody.
Bez get()
Eliminuje niebezpieczny wzorzec isPresent() + get().
Płynny
Łączy się naturalnie po findUser() lub dowolnej metodzie zwracającej Optional.
Stare podejście
if/else na Optional
Nowoczesne podejście
ifPresentOrElse()
Od JDK
9
Poziom trudności
Początkujący
Wsparcie JDK
Optional.ifPresentOrElse()
Dostępne
Szeroko dostępne od JDK 9 (wrzesień 2017)
Jak to działa
ifPresentOrElse() przyjmuje Consumer dla przypadku obecnego i Runnable dla przypadku pustego. Unika antywzorca isPresent/get.
Powiązana dokumentacja
Dowód