Streams 中级

无需嵌套检查即可链式调用 Optional 回退。

✕ Java 8
Optional<Config> cfg = primary();
if (!cfg.isPresent()) {
    cfg = secondary();
}
if (!cfg.isPresent()) {
    cfg = defaults();
}
✓ Java 9+
Optional<Config> cfg = primary()
    .or(this::secondary)
    .or(this::defaults);
发现此代码有问题? 告诉我们。
🔗

可链式调用

在可读的管道中堆叠回退。

🎯

保持 Optional

返回 Optional<T> 而非 T,因此可以继续链式调用。

📏

扁平

无嵌套的 isPresent() 检查。

旧方式
嵌套回退
现代方式
.or() 链
自 JDK
9
难度
中级
Optional.or() 回退
可用

自 JDK 9 起广泛可用(2017 年 9 月)

Optional.or() 在有值时返回原始 Optional,否则返回由提供的 Supplier 生成的另一个 Optional。与 orElse() 不同,它保持 Optional 类型。

分享 𝕏 🦋 in