首页 > 解决方案 > 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()但我不能完全理解应该如何使用这些东西......你能否指出我的代码应该如何看待的正确方向?

标签: javaspring-bootspring-webfluxproject-reactor

解决方案


filter()并且它的变体只能从流中删除项目(或者在 的情况下Mono,单个项目)。他们无法将它们映射到另一个值——即使你以某种方式实现这一点,你的反应流也很难阅读,因为你实际上是在滥用运算符。

map()flatMap()(取决于您是想要同步映射还是异步映射)正是在这里做事的正确方法。当然,if声明看起来不太整洁,但如果你想避免这种情况,只需使用三元:

.flatMap(count -> count==1 ? A() : B())

...而不是试图滥用运算符来避免它。与上面类似的代码在反应流中很常见,没有必要竭尽全力避免它。


推荐阅读