Rxjava: flatMapIterable and toList combination issue

Created on 16 Feb 2016  路  2Comments  路  Source: ReactiveX/RxJava

In the following code the "three" and "done" never appears in the output. Looks like the problem is in toList call. Am i using it wrong?

PublishSubject<Boolean> mBooleanPublishSubject = PublishSubject.create();
Observable<Boolean> observable = mBooleanPublishSubject.asObservable().share();
observable
        .doOnNext(__ -> System.out.println("one"))
        .flatMap(__ -> Observable.just(Arrays.asList(1, 2, 3, 4)))
        .flatMapIterable(number -> number)
        .doOnNext(v -> System.out.println("two " + v))
        .toList()
        .doOnNext(v -> System.out.println("three " + v))
        .subscribe(v -> System.out.println("done"));
mBooleanPublishSubject.onNext(true);
Question

Most helpful comment

Thanks for the explanation. It works like this

PublishSubject<Boolean> mBooleanPublishSubject = PublishSubject.create();
        Observable<Boolean> observable = mBooleanPublishSubject.asObservable().share();
        observable
                .doOnNext(__ -> System.out.println("one"))
                .flatMap(__ -> Observable.just(Arrays.asList(1, 2, 3, 4))
                        .flatMapIterable(number -> number)
                        .doOnNext(v -> System.out.println("two " + v))
                        .toList()
                        .doOnNext(v -> System.out.println("three " + v)))
                .doOnNext(v -> System.out.println("four " + v))
                .subscribe(v -> System.out.println("done"));
        mBooleanPublishSubject.onNext(true);
        mBooleanPublishSubject.onNext(true);

All 2 comments

toList waits for onCompleted event. In your case there is no onCompleted event. Add mBooleanPublishSubject.onCompleted(); and you will see others outputs.

Thanks for the explanation. It works like this

PublishSubject<Boolean> mBooleanPublishSubject = PublishSubject.create();
        Observable<Boolean> observable = mBooleanPublishSubject.asObservable().share();
        observable
                .doOnNext(__ -> System.out.println("one"))
                .flatMap(__ -> Observable.just(Arrays.asList(1, 2, 3, 4))
                        .flatMapIterable(number -> number)
                        .doOnNext(v -> System.out.println("two " + v))
                        .toList()
                        .doOnNext(v -> System.out.println("three " + v)))
                .doOnNext(v -> System.out.println("four " + v))
                .subscribe(v -> System.out.println("done"));
        mBooleanPublishSubject.onNext(true);
        mBooleanPublishSubject.onNext(true);
Was this page helpful?
0 / 5 - 0 ratings