首页 > 解决方案 > 过滤多个条件 - reactor Flux/Mono filterWhen()

问题描述

我正在使用filterWhen()具有以下多个条件的 Mono,但不知道如何实现正确的方法。

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 时,当conditionA(或conditionB)返回false 时是否立即返回?

同样当使用条件A || 条件B,当条件A(或条件B)返回true时是否立即返回?

标签: javareactive-programmingspring-webfluxproject-reactorwebflux

解决方案


运营商Flux#allFlux#any是您正在寻找的。

首先,如果所有响应都被评估为 true ,则将响应合并到 a FluxofBoolean并使用Flux#all以发出单个布尔值true:

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

通过这种方式, if conditionAis发出falsefalse而不等待contitionB被评估。

作为旁注,Flux.merge急切地订阅发布者(所有发布者一起订阅)。如果您想按顺序执行条件,请Flux.concat改用。


推荐阅读