[英]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.