Search code examples
androidrx-javarx-java2

RxJava Android - replace list with map or flatmap


I am pretty new to RxJava

I have an Observable

  private static rx.Observable<List<item>> getList() {
        return rx.Observable.fromCallable(() -> {
            call some internal methods
            return list;
        });
    }

I have a caller method

public static void getListFromObservable() {
        getList().subscribeOn(Schedulers.io())
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe( new Subscriber<List<item>>() {
                @Override
                public void onCompleted() {}

                @Override
                public void onError(Throwable error) {}

                @Override
                public void onNext(List<item> i) {
                    for (item each : i) {
                           getSubdetails(each)
                          .subscribeOn(Schedulers.io())
                          .observeOn(AndroidSchedulers.mainThread())
                          .subscribe(new Subscriber<Boolean>() {

                           @Override
                           public void onCompleted() {}
                           @Override
                           public void onError(Throwable error) {  }
                           @Override
                           public void onNext(Boolean aBoolean) {}
                   });
      }

This is another observable

private static rx.Observable<Boolean>> getSubdetails(item i) {
            return rx.Observable.fromCallable(() -> {
                call some internal methods
                return true;
            });
        }

I do not want to use foreach in the OnNext, but I want to use Map or FlatMaps. Can someone help me on how to do this?


Solution

  • For example:

    getList()
        .subscribeOn(Schedulers.io())
        .flatMapIterable(list -> list)
        .flatMap(each -> getSubdetails(each))
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(/* ... */);