Java 如何并行调用多个可流动语句?

Java 如何并行调用多个可流动语句?,java,concurrency,rx-java,rx-java2,Java,Concurrency,Rx Java,Rx Java2,我有几个函数调用返回可流动对象。我必须多次调用这个函数,这个函数正在进行一些网络调用。我想同时打这些电话。 下面是代码 包含函数的接口 public Interface XYZDownstreamService { Flowable<String> getData(Request request); } 公共接口XYZDownstreamService{ 可流动的getData(请求); } 下面是呼叫者 public List<String> getDataF

我有几个函数调用返回可流动对象。我必须多次调用这个函数,这个函数正在进行一些网络调用。我想同时打这些电话。 下面是代码

包含函数的接口

public Interface XYZDownstreamService {

  Flowable<String> getData(Request request);
}
公共接口XYZDownstreamService{
可流动的getData(请求);
}
下面是呼叫者

public List<String> getDataFromDownstreamForRequests(List<Request> requests, XYZDownstreamService service) {
    List<String> dataFromDownstream = Lists.newArrayList();
    for(Request request: requests) {
        dataFromDownstream.add(service.getData(request).blockingFirst());
    }
    return dataFromDownstream;
}
公共列表getDataFromDownstreamForRequests(列表请求,XYZDownstreamService服务){
List dataFromDownstream=Lists.newArrayList();
for(请求:请求){
datafromdepdown.add(service.getData(request.blockingFirst());
}
从下游返回数据;
}

我想同时执行上述函数调用,以优化for a循环。最好的方法是什么?

您只需使用
merge
flatMap
合并请求即可。此外,使用不同的线程来处理您的请求,使用
observeOn

Flowable.merge(请求)
.stream()
.map(r->service.getData(r)
.observeOn(Schedulers.io()))
.collect(toList())
).subscribe()
或者像这样写:

Flowable.fromIterable(请求)
.flatMap(r->service.getData(r)
.observeOn(Schedulers.io())
.subscribe();

关于更多细节,我已经回答了一个问题。

您是指RxJava中的Flowable-business process engine还是io.reactivex.Flowable-interface?是的,它来自RxJava