java - Java 中 Mono 的条件响应式执行
问题描述
我有一个方法可以根据条件从数据库返回实体的计数,假设该方法返回 aMono<Long>
并且它被调用,repository.count()
好像计数为 1 我想调用方法A
,如果计数 > 1 我想调用方法B
。我想避免使用类似repository.count().flatmap(count -> if (count == 1L) return A(); if (count > 1L) return B(); (...) }
我想使用的东西,.filter()
或者filterWhen()
但我不能完全理解应该如何使用这些东西......你能否指出我的代码应该如何看待的正确方向?
解决方案
filter()
并且它的变体只能从流中删除项目(或者在 的情况下Mono
,单个项目)。他们无法将它们映射到另一个值——即使你能以某种方式实现这一点,你的反应流也很难阅读,因为你实际上是在滥用运算符。
map()
或flatMap()
(取决于您是想要同步映射还是异步映射)正是在这里做事的正确方法。当然,if
声明看起来不太整洁,但如果你想避免这种情况,只需使用三元:
.flatMap(count -> count==1 ? A() : B())
...而不是试图滥用运算符来避免它。与上面类似的代码在反应流中很常见,没有必要竭尽全力避免它。
推荐阅读
- awk - 使用 awk 模式归档过滤数据
- xml - Android Studio - “未找到 layout_constraintTop_toEndOf。”
- google-cloud-dataproc - 如何使用 dataproc 从与我的 dataproc 集群不在同一个项目中的 bigquery 中提取数据?
- docker - Docker 是否使用不同的工具在不同的操作系统上运行容器?
- excel - 使用动态范围在 2 张纸上剪切复制粘贴宏
- javascript - 将事件处理程序标记为“被动”是否会延迟其调用或减少调用次数?
- python - 具有不同概率的数据的平均值
- python - 这个脚本有什么问题?我收到 HTTP 错误
- javascript - onMouseOver 和 onMouseOut 切换输入和 div,并更改 div 的值
- hive - 将窗口函数应用于大数据集(如何优化?)