是否可以根据某些过滤器将内容从一个通量插入到另一个通量

Is it possible to insert content from one flux to another flux based upon some filter

我想根据某些条件将一种助焊剂的内容填充到另一种助焊剂中。这是我的两个助焊剂:

Flux<templateVersionBo> templateVerion = templateVersionRepo.findAll();
Flux<templateBo> template = templateRepo.findAll();

templateVersion 包含模板的 id。我想将模板版本填充到模板变量中,比如模板 'publishedVersion' 和 return templateBo flux,如下所示:

    if (templateVersion.getTemplateId().equals(template.getId()) {
            templateBo.setTemplatePublishedVersion(version);
    }
return templateBo;

我是响应式编程的新手。所以即使不使用 block/subscribe 也不确定是否可能。

如果您的 idLong 并且 TemplateBo 的版本是 "wither",您可以像这样映射您的模板:

    // async collect id -> version map
    Mono<Map<Long, TemplateVersionBo>> templateVersionsMapMono =
            templateVerion.collectMap(TemplateVersionBo::getTemplateId);

    // get version from map by template id
    Flux<TemplateBo> templateBoFlux = templateVersionsMapMono
            .flatMapMany(templateVersionsMap -> template
                    .map(templateBo -> templateBo.withTemplatePublishedVersion(
                            templateVersionsMap.get(templateBo.getId()).getVersion())));

这个方法终于对我有用了:

Mono<TemplateBo> templateBoMono = templateVersion
            .collectMap(version -> version.getTemplateId())
            .flatMap(publishedMap ->
                template.map(templateBo -> {
                    templateBo.setPublished(publishedMap.get(templateId));
                    return templateBo;
                }));