如何根据 Mono<Foo> 中的条件更新 Mono<Bar>?

How to update Mono<Bar> based on a condition in Mono<Foo>?

我从这个

中给出的答案中得到以下代码
bars = bars.flatMap(bar -> findByBarId(bar.getBarId())
                    .flatMap(foo -> {
                         bar.setIsInFoo(true);
                         return Mono.just(bar);
                    }).switchIfEmpty(Mono.just(bar)));

如果我有单个 Mono<Bar> bar Mono<Foo> foo 而不是上面的 Flux 变体并获得修改后的柱,如何做上面的事情?

无论您是从 Mono<Bar> bar 还是从 Flux<Bar> bars 开始,都应该应用完全相同的逻辑。代码可以在第一个 flatMap 中稍微简化为使用 mapdefaultIfEmpty 以避免中间 Monos:

的开销
Mono<Bar> source;
Mono<Bar> updated = source
    .flatMap(bar -> findByBarId(bar.getBarId())
        .map(foo -> {
            bar.setIsInFoo(true);
            return bar;
         })
        .defaultIfEmpty(bar)
    );