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