如何合并动态 Mono 返回方法

Posted

技术标签:

【中文标题】如何合并动态 Mono 返回方法【英文标题】:How to merge dynamic Mono returning methods 【发布时间】:2020-05-08 22:43:56 【问题描述】:

我有 1 个简单的界面。

public interface Validator
    public Mono<String> perFormValidation(Employee e);

然后用方法实现类。

那么如何使用 mergeWith 或任何其他方法来合并这些单声道返回方法

在我的主要课程中,我正在做下面的事情

List<Validator> vals;

    @Autowired
    public ValidatorService(List<Validator> vals) 
        this.vals= vals;
    

但不知道如何进一步进行

【问题讨论】:

我认为你的意思是标记反应堆而不是校长 哦,是的,正确:P 【参考方案1】:

如果您想最终获得验证结果列表,则需要Flux。您可以将验证器列表转换为Flux,然后将其平面映射到验证结果,如下所示:

Employee employee = new Employee();

Mono<List<String>> validations = Flux.fromIterable(vals)
        .flatMap(validator -> validator.performValidation(employee))
        .collect(toList());

或者,如果您不想要 Mono&lt;List&lt;String&gt;&gt; 而可以返回 Flux&lt;String&gt;,因为 Flux 类似于列表,而 Mono 类似于单个对象。

Flux<String> validations = Flux.merge(validators.stream()
        .map( validator -> validator.performValidation(employee))
        .collect(toList()));

【讨论】:

以上是关于如何合并动态 Mono 返回方法的主要内容,如果未能解决你的问题,请参考以下文章

如何将返回 `void` 的同步方法包装到 Mono<Void> 中?

如何使用 Micrometer Timer 记录异步方法的持续时间(返回 Mono 或 Flux)

如何结合 Mono 和 Flux 作为参数来创建新的 Mono?

关于表格合并span-method方法的补充(表格数据由后台动态返回)

返回 Mono<Void> 后的方法调用

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