将多个 Flux 合二为一
Collect multiple Flux into one
我想在我的 Spring 引导服务中将多个 Flux 结果合并为一个。我的方法:
private Flux<VMachineResourceResponse> getDataForPhysicalMachineProtection(
ResourcesWrapper resources, UUID groupId) {
Flux<VMachineResourceResponse> result = Flux.empty();
resources
.getHypervResources()
.forEach(
resource -> {
Flux<VMachineResourceResponse> protectedResourcesForAgentAndId =
hypervAgentService.getProtectedResourcesForAgentAndId(
groupId, resource.getAgentId());
result.mergeWith(protectedResourcesForAgentAndId); //maybe that way???
});
return result;
}
怎么做?
您应该将您的列表粘贴到 Flux
中,然后 flatMap
覆盖它并获取每个新的 Flux
。 flatMap
会自动将所有内容“扁平化”为一个 Flux
下面的例子应该能说明这个概念:
public Flux<String> getData() {
final List<String> strings = new ArrayList<>();
strings.add("Foo");
strings.add("Bar");
return Flux.fromIterable(strings)
.flatMap(this::get);
}
private Flux<String> get(String s) {
return Flux.just(s + "Bar", s + "Foo");
}
我想在我的 Spring 引导服务中将多个 Flux 结果合并为一个。我的方法:
private Flux<VMachineResourceResponse> getDataForPhysicalMachineProtection(
ResourcesWrapper resources, UUID groupId) {
Flux<VMachineResourceResponse> result = Flux.empty();
resources
.getHypervResources()
.forEach(
resource -> {
Flux<VMachineResourceResponse> protectedResourcesForAgentAndId =
hypervAgentService.getProtectedResourcesForAgentAndId(
groupId, resource.getAgentId());
result.mergeWith(protectedResourcesForAgentAndId); //maybe that way???
});
return result;
}
怎么做?
您应该将您的列表粘贴到 Flux
中,然后 flatMap
覆盖它并获取每个新的 Flux
。 flatMap
会自动将所有内容“扁平化”为一个 Flux
下面的例子应该能说明这个概念:
public Flux<String> getData() {
final List<String> strings = new ArrayList<>();
strings.add("Foo");
strings.add("Bar");
return Flux.fromIterable(strings)
.flatMap(this::get);
}
private Flux<String> get(String s) {
return Flux.just(s + "Bar", s + "Foo");
}