Reescribiendo opcional sin necesidad de utilizar isPresent

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..elsecon isPresent; ¿cómo puedo volver a escribir esto para hacer un mejor uso de Optionalmanera que el flujo de las estancias de la lógica de la misma?

Yo estaba pensando en usar or, orElseo 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, orElseo orElseGetuna 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 ifPresentOrElseen 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();

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=296635&siteId=1
Recomendado
Clasificación