【发布时间】:2021-02-08 02:33:43
【问题描述】:
我有 2 个源 Flux 流,它们返回所有关键字和所有字典的流:
Flux<Keyword> keywordFlux = keywordRepository.findAll();
Flux<Dictionary> dictionaryFlux = dictionaryRepository.findAll();
Keyword 具有对 Dictionary 对象的引用,如下所示:
public class Keyword {
private String id;
private String dictionaryId;
}
目标是转换后的Flux<DictionaryTO>,其中包含Dictionary 的所有属性以及属于字典的关键字列表:
public class DictionaryTO {
private String id;
private Collection<KeywordTO> keywords;
}
public class KeywordTO {
private String id;
}
问题是如何在不阻塞任何源流的情况下以反应方式压缩/合并这 2 个 Flux 流。
请注意keywordFlux 包含所有关键字,因此应根据Keyword.dictionaryId 应用一些过滤。
【问题讨论】:
-
您必须至少缓存其中一个输入才能加入它们。很明显,如果您想要 all 字典的关键字,您将不得不扫描整个关键字源 - 除非这里有更多的结构,您还没有包含在您的问题陈述中。跨度>
-
感谢您的回复。但即使我在
dictionaryFlux.map中执行keywordFlux.cache()和keywordFlux.filter(),我也需要执行阻塞来为特定字典构建关键字列表。哪个不好。 -
不明白为什么你需要阻止 - 收集一个到
Mono<Map>>然后你将flatMap另一个在。正如我所说,你不能发出一个字典直到您看到所有关键字 - 但您不需要阻止,只需暂停...
标签: java project-reactor flux