首页 > 解决方案 > 如何并行调用多个Flowable语句?

问题描述

我有一些返回 Flowable 对象的函数调用。我必须多次调用这个函数,这个函数正在做一些网络调用。我想同时做所有这些电话。下面是代码。

包含函数的接口

public Interface XYZDownstreamService {

  Flowable<String> getData(Request request);
}

下面是来电者

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;
}

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

标签: javaconcurrencyrx-javarx-java2

解决方案


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

Flowable.merge(requests
  .stream()
  .map(r -> service.getData(r)
              .observeOn(Schedulers.io())))
  .collect(toList())
).subscribe()

或者这样写:

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

我已经回复了一个类似的问题以获取更多详细信息。


推荐阅读