Astra
Astra

Reputation: 1

How to call multiple Flowable statements in parallel?

I have a few function calls that return Flowable object. I have to call this function multiple times and this function is doing some network calls. I want to do all these calls concurrently. Below is the code.

Interface containing the function

public Interface XYZDownstreamService {

  Flowable<String> getData(Request request);
}

Below is the Caller

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

I want to do the above function calls concurrently to optimize the for a loop. What is the best way to do it?

Upvotes: 0

Views: 830

Answers (1)

bubbles
bubbles

Reputation: 2717

You just need to merge your requests using merge or flatMap. Moreover, use a diffrent threads to process your requests using observeOn.

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

Or write it like :

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

I've already reply to a similar question for more details.

Upvotes: 2

Related Questions