Most of your example can be rewritten with standard RxJava statements that work well together:
public class Example { Scheduler scheduler = Schedulers.from(executor); public Observable<Review> findReviewsByItem(final String item) { return Observable.just(item) .subscribeOn(scheduler) .flatMapIterable(reviewService::findReviewsByItem); } public List<WareAndReview> findWaresWithReviews() { return wareService .findWares() .map(WareAndReview::new) .flatMap(wr -> { return reviewService .findReviewsByItem(wr.getWare().getItem()) .doOnNext(wr::addReview) .lastOrDefault(null) .map(v -> wr); }) .toList() .toBlocking() .first(); } }
Whenever you want to compose such services, think first of flatMap . You do not need to block for each sub-observable, but only at the very end with toBlocking() , if it is really necessary.
akarnokd
source share