0
votes

I have RxJava filter to get POA's only that are not deleted(deactivated) and I am quite sure that I have one result, but I do not get any result in subscribe.

Disposable disposable = appDatabase.poaDao().getAllMine()
    .flatMap(poaDbs -> Flowable.fromIterable(poaDbs))
    .filter(poaDb -> !poaDb.isDeleted())
    .toList()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(poaDbs ->
                   view.onActivePoasIssuedByMe(poaDbs),
               throwable -> view.handleError(throwable));

What could be the reason? I have tried debugging but it never gets to sunbscribe().

1
It could be since it returns all result after I remove toList, but I need to filter the data. Is there any other way to filter data in reactive way?Zookey
Define getAllMine() as Single<List<POAwhatever>> and you should get a single list of results to filter.akarnokd

1 Answers

1
votes

Your issue is that the Observable is not completing, so .toList() will never be executed.
You said you need to filter the list you are getting, but if that is the case, you have a different option.

Instead of doing this:

.flatMap(poaDbs -> Flowable.fromIterable(poaDbs))
    .filter(poaDb -> !poaDb.isDeleted())
    .toList()

You want to do:

.flatMapSingle(poaDbs -> Observable.fromIterable(poaDbs)
     .filter(poaDb -> !poaDb.isDeleted())
     .toList())

Note that the .filter and .toList operators are applied to the internal Observable.

Extra note: this is even easier when using Kotlin since it provides the filter operation on collections, and you don't have to rely on RxJava or Java8 streams