多条件过滤 - reactor Flux/Mono filterWhen()

Filter multiple condition - reactor Flux/Mono filterWhen()

我正在使用 Mono 的 filterWhen() 和多种条件,如下所示,但不知道如何实施正确的方法。

Mono.just("a").filterWhen(item -> conditionA && conditionB)...
// or Mono.just("a").filterWhen(item -> conditionA || conditionB)...

// both is reactive call
Mono<Boolean> conditionA(String a) {
     return webClient.call(....).map(Boolean);//sample return Boolean here}
Mono<Boolean> conditionB(String a) {
     return webClient.call(....).map(Boolean);//sample return Boolean here}

当使用conditionA && conditionB时,是否立即return当conditionA(或conditionB)return false?

还有当使用conditionA时|| conditionB,当conditionA(或conditionB)return为真时,是否立即return?

运算符 Flux#allFlux#any 就是您要查找的内容。

首先,将响应合并到 BooleanFlux 并使用 Flux#all 发出单个布尔值 true 如果 all 响应是评估为真:

Flux.merge(conditionA(), conditionB()).all(condition -> condition)

这样,如果 conditionAfalse,则值 false 会在不等待 contitionB 被评估的情况下发出。

附带说明一下,Flux.merge 热切订阅发布者(所有发布者一起订阅)。如果您想按顺序执行条件,请改用 Flux.concat