不使用 isPresent 重写 Optional

Rewriting Optional without using isPresent

void spendTheNight() {
    Optional<Homework> homework = getHomeworkDueTonight();
    if (homework.isPresent()) {
        rushThrough(homework.get());
    } else {
        homework = getHomeworkDueNextWeek();
        if (homework.isPresent()) {
            workSlowlyOn(homework.get());
        } else {
            partyHard();
        }
    }
    goToBed();
}

我知道用 isPresentif..else 是不好的做法;我怎样才能重写它以更好地利用 Optional,使逻辑流程保持不变?

我正在考虑使用 ororElseorElseGet,但不确定如何在这里使用它们,在第一个 else 中进行附加分配.

(假设自定义方法无法修改且必须按原样使用)

你列出的所有APIororElseorElseGet return一个或另一个值,你的代码似乎更多围绕运行 基于 return 类型方法的某些条件的存根。

在这种情况下您可以使用 ifPresentOrElse,因为 Java 9:

Optional<Homework> homework = getHomeworkDueTonight(); 
homework.ifPresentOrElse(this::rushThrough, () -> { 
    Optional<Homework> hw = getHomeworkDueNextWeek(); 
    hw.ifPresentOrElse(this::workSlowlyOn, this::partyHard); 
});
goToBed();