[英]How to return a Reactive Flux that contains a Reactive Mono and Flux?
[英]How to iterate on a Flux to produce a new Flux and still work in a Reactive way?
我有 2 種方法,分別生成Flux<String>
和Flux<Integer>
。
public Flux<String> buildName() {
return Flux.just(personProcessor.buildName());
}
public Flux<Integer> computeAge() {
return Flux.just(personProcessor.computeAge());
}
這些方法生成隨機值來填充一個人 object。
現在我想迭代並創建 X Person,每個人都有隨機值。
我創建了一個新的 Flux( processor
是持有方法的服務的名稱):
Flux<Person> persons = Flux.zip(processor.buildName(), processor.computeAge(),
(name, age) -> Person.builder().name(name).age(age).build() );
我的問題是,當我在“人員”Flux 上使用常規循環進行迭代時,我總是得到具有相同名稱和年齡值的 Person 對象。 我認為這很正常,因為我的循環只訂閱了 Flux,然后得到了 Flux 的相同“第一個”object。 我只是不知道如何迭代 Flux“人”,以便每次都能獲得一個具有自己的姓名和年齡值的人 object。
我如何在此 Flux 上迭代 X 次以獲得具有隨機值的 X Person 對象?
當然,這個迭代也應該產生一個 Flux 來讓我處理 Person object。
您可以按如下方式簡化它:
Flux.range(1, n)
.map(i -> Person.builder()
.name(personProcessor.buildName())
.age(personProcessor.computeAge())
.build())
除了 Ikatiforis 最簡單的解決方案外,您還可以執行以下類似於原始解決方案的操作。 如果以某種異步方式提供隨機值,這將很有用。
public Flux<String> buildName() {
return Mono.fromCallable(() -> personProcessor.buildName()).repeat();
}
public Flux<Integer> computeAge() {
return Mono.fromCallable(() -> personProcessor.computeAge()).repeat();
}
然后zip
部分幾乎相同:
Flux<Person> persons = Flux.zip(processor.buildName(), processor.computeAge(),
(name, age) -> Person.builder().name(name).age(age).build())
.take(X);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.