Optional.ifPresentOrElse()
Beide Fälle eines Optional – vorhanden und leer – in einem einzigen Aufruf behandeln.
Code-Vergleich
✕ Java 8
Optional<User> user = findUser(id);
if (user.isPresent()) {
greet(user.get());
} else {
handleMissing();
}
✓ Java 9+
findUser(id).ifPresentOrElse(
this::greet,
this::handleMissing
);
Problem mit diesem Code entdeckt? Sag uns Bescheid.
Warum der moderne Weg gewinnt
Einzelner Ausdruck
Beide Fälle werden in einem Methodenaufruf behandelt.
Kein get()
Eliminiert das gefährliche isPresent() + get()-Muster.
Fließend
Kettet sich natürlich nach findUser() oder jeder Optional-zurückgebenden Methode.
Alter Ansatz
if/else auf Optional
Moderner Ansatz
ifPresentOrElse()
Seit JDK
9
Schwierigkeitsgrad
Einsteiger
JDK-Unterstützung
Optional.ifPresentOrElse()
Verfügbar
Weitgehend verfügbar seit JDK 9 (Sept. 2017)
Wie es funktioniert
ifPresentOrElse() nimmt einen Consumer für den vorhandenen Fall und ein Runnable für den leeren Fall. Es vermeidet das isPresent/get-Antimuster.
Zugehörige Dokumentation