Можно ли вставить содержимое из одного потока в другой поток на основе какого-либо фильтра - PullRequest
0 голосов
/ 10 октября 2018

Я хочу заполнить содержимое одного потока в другой, основываясь на некотором условии.Вот мои два потока:

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

TemplateVersion содержит идентификатор шаблона.Я хочу, чтобы заполнить версию шаблона в переменной шаблона, скажем, template 'publVersion', и вернуть templateBo flux следующим образом:

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

Я новичок в реактивном программировании.Так что не уверен, даже если это возможно или нет без использования блокировки / подписки.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Наконец, этот подход сработал для меня:

Mono<TemplateBo> templateBoMono = templateVersion
            .collectMap(version -> version.getTemplateId())
            .flatMap(publishedMap ->
                template.map(templateBo -> {
                    templateBo.setPublished(publishedMap.get(templateId));
                    return templateBo;
                }));
0 голосов
/ 10 октября 2018

Если ваш id равен Long, а TemplateBo имеет "увядание" для версии, вы можете сопоставить свои шаблоны следующим образом:

    // 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())));
...