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的条件响应式执行[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

我对响应式编程中Mono和Flux的理解

学习响应式编程 Reactor - reactor 基础

响应式编程详解,带你熟悉Reactor响应式编程

Reactor响应式编程(Mono)

如何以响应式方式通过 Mono 返回应用程序/pdf

webflux响应式编程中访问Post方法json RequestBody参数