多条件过滤 - 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#all
和 Flux#any
就是您要查找的内容。
首先,将响应合并到 Boolean
的 Flux
并使用 Flux#all
发出单个布尔值 true 如果 all 响应是评估为真:
Flux.merge(conditionA(), conditionB()).all(condition -> condition)
这样,如果 conditionA
是 false
,则值 false
会在不等待 contitionB
被评估的情况下发出。
附带说明一下,Flux.merge
热切订阅发布者(所有发布者一起订阅)。如果您想按顺序执行条件,请改用 Flux.concat
。
我正在使用 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#all
和 Flux#any
就是您要查找的内容。
首先,将响应合并到 Boolean
的 Flux
并使用 Flux#all
发出单个布尔值 true 如果 all 响应是评估为真:
Flux.merge(conditionA(), conditionB()).all(condition -> condition)
这样,如果 conditionA
是 false
,则值 false
会在不等待 contitionB
被评估的情况下发出。
附带说明一下,Flux.merge
热切订阅发布者(所有发布者一起订阅)。如果您想按顺序执行条件,请改用 Flux.concat
。