Java中Mono的条件响应式执行[关闭]
Posted
技术标签:
【中文标题】Java中Mono的条件响应式执行[关闭]【英文标题】:Conditional reactive execution of Mono in Java [closed] 【发布时间】:2021-07-17 13:03:19 【问题描述】:我有一个方法可以根据条件从数据库中返回实体的计数,假设该方法返回Mono<Long>
,如果计数为1,则称为repository.count()
我想调用方法@987654323 @ ,如果计数 > 1 我想调用方法 B
。我想避免使用repository.count().flatmap(count -> if (count == 1L) return A(); if (count > 1L) return B(); (...)
之类的东西,而我想使用.filter()
或filterWhen()
,但我不能完全理解应该如何使用它们......你能指出我正确的方向吗?我的代码应该是什么样子?
【问题讨论】:
为什么要使用过滤器?它不是它的设计目的。你仍然需要一个 if 语句 【参考方案1】:filter()
及其变体只能从流中删除 项(或在Mono
的情况下为单个项)。他们无法将它们映射到另一个值 - 即使您可以以某种方式实现这一点,您的反应流也将很难阅读,因为您实际上是在滥用运算符。
map()
或flatMap()
(取决于您需要同步映射还是异步映射)正是正确的方法。当然if
语句看起来不太整洁,但如果你想避免这种情况,只需使用三元:
.flatMap(count -> count==1 ? A() : B())
...而不是试图滥用运算符来避免它。类似上面的代码在响应式流中很常见,没有必要竭尽全力避免它。
【讨论】:
以上是关于Java中Mono的条件响应式执行[关闭]的主要内容,如果未能解决你的问题,请参考以下文章