xiwuroke:
void spendTheNight() {
Optional<Homework> homework = getHomeworkDueTonight();
if (homework.isPresent()) {
rushThrough(homework.get());
} else {
homework = getHomeworkDueNextWeek();
if (homework.isPresent()) {
workSlowlyOn(homework.get());
} else {
partyHard();
}
}
goToBed();
}
Sé que es una mala práctica que ver if..else
con isPresent
; ¿cómo puedo volver a escribir esto para hacer un mejor uso de Optional
manera que el flujo de las estancias de la lógica de la misma?
Yo estaba pensando en usar or
, orElse
o orElseGet
, pero no sabe cómo usarlos aquí, con esa asignación adicional en el primero else
.
(Asumir los métodos personalizados no se pueden modificar y debe ser utilizado como está)
también:
Todas las API mencionados por usted or
, orElse
o orElseGet
una devolución o el otro valor, el código parece estar más en torno a la ejecución de un trozo función de algunas condiciones de todo tipo de retorno de los métodos.
Se puede utilizar ifPresentOrElse
en este caso, un, ya que Java 9:
Optional<Homework> homework = getHomeworkDueTonight();
homework.ifPresentOrElse(this::rushThrough, () -> {
Optional<Homework> hw = getHomeworkDueNextWeek();
hw.ifPresentOrElse(this::workSlowlyOn, this::partyHard);
});
goToBed();