[英]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 时,是否在conditionA(或conditionB)返回false 时立即返回?
也当使用 conditionA || 条件B,当条件A(或条件B)返回true时是否立即返回?
运算符Flux#all
和Flux#any
正是您要寻找的。
首先,将响应合并到一个Flux
of Boolean
并使用Flux#all
来发出一个布尔值 true 如果所有响应都被评估为 true:
Flux.merge(conditionA(), conditionB()).all(condition -> condition)
以这种方式,如果conditionA
是false
值false
被发射,而无需等待contitionB
进行评估。
作为旁注, Flux.merge
急切地订阅发布者(所有发布者一起订阅)。 如果您想按顺序执行条件,请改用Flux.concat
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.