延迟评估 Project Reactor 的 Mono 的 switchIfEmpty

Lazily evaluated switchIfEmpty for Project Reactor's Mono

我正在寻找一种方法来检索替代的 Mono,以防原始 Mono 为空。我找到的最接近的是 Mono.switchIfEmpty,但我的问题是我无法将 lambda 表达式传递给它,因此即使 Mono 具有非空值也会调用它。这有点像 Optional.orElse vs Optional.orElseGet.

这是一个示例:

return someService.findSomeElements()           // returns a Flux<Element>
                  .filter(this::checkIfMatches)
                  .singleOrEmpty()
                  .switchIfEmpty(...);          // <-- I want to use lambda here 

将替代项 Mono 包装在 switchIfEmpty 内的 Mono.defer 中,只有当原始项为空时才会延迟实例化。