懒惰地评估Project Reactor Mono的switchIfEmpty

Bal*_*azs 4 java project-reactor

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

这是一个示例:

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

Sim*_*slé 7

将替代方案包装Mono在的Mono.defer内部,switchIfEmpty只有当原稿为空时,它才会被延迟实例化。

  • 谢谢,它似乎正在工作,但是我不知道为什么没有一个更简单的解决方案,即具有类似switchIfEmpty(Supplier Alternative)`的重载版本? (5认同)