java - 过滤多个条件 - 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时是否立即返回?
解决方案
运营商Flux#all
和Flux#any
是您正在寻找的。
首先,如果所有响应都被评估为 true ,则将响应合并到 a Flux
ofBoolean
并使用Flux#all
以发出单个布尔值true:
Flux.merge(conditionA(), conditionB()).all(condition -> condition)
通过这种方式, if conditionA
is发出false
值false
而不等待contitionB
被评估。
作为旁注,Flux.merge
急切地订阅发布者(所有发布者一起订阅)。如果您想按顺序执行条件,请Flux.concat
改用。
推荐阅读
- excel - 或在条件格式公式中刹车条件给出意想不到的结果
- c# - 获取 SyntaxError:无效的语法窗口 10
- java - 如何从适配器打开新活动?
- python - 视图或模型管理器上的查询集 DJANGO
- python - 尝试打开 Chrome Web 驱动程序,它打开和关闭
- django - 如何在 pythonware 中创建虚拟环境?
- memory-management - x86_64 中还有 HIGHMEM 分配吗?
- python-3.x - 如何在python中加入属于他们所在州的所有城市
- javascript - 如何将身份验证令牌作为标头从 html 文件传递
- javascript - ReactJs,带有按钮的下拉菜单还是我应该使用其他东西?