将Observable <RealmResults <T >>>转换为Observable <List <T >>>

Ign*_*nte 7 android realm rx-java

我尝试使用Realm和RxJava实现模式Repository.存储库接口具有这样的签名

Observable<List<T>> query(Specification specification);
Run Code Online (Sandbox Code Playgroud)

因此,当我使用Realm并想要检索结果"asObservable"时,我得到了Observable>.我找不到将Observable变换为Observable>的方法.

任何人都可以帮忙解决这个问题吗?

我试过这样的事

final Observable<RealmResults<PlantRealm>> realmResults = realm.where(PlantRealm.class)
               .equalTo(PlantTable.ID, "1")
               .findAll().asObservable();

// convert Observable<RealmResults<PlantRealm>> into Observable<List<PlantRealm>>

    return realmResults.flatMap(Observable::from).toList().map(list -> {

                for (PlantRealm plantRealm : list) {
                    plants.add(toPlant.map(plantRealm));
                }
                return Observable.from(plants);
            }
    );
Run Code Online (Sandbox Code Playgroud)

但类型检查系统仍在抱怨....

return Observable.create( subscriber -> {

       final Realm realm = Realm.getInstance(realmConfiguration);
       final RealmResults<PlantRealm> realmResults = realm.where(PlantRealm.class)
               .equalTo(PlantTable.ID, "1")
               .findAll();

       final List<Plant> plants = new ArrayList<>();

       for (PlantRealm plantRealm : realmResults) {
           plants.add(toPlant.map(plantRealm));
       }

       realm.close();

       subscriber.onNext(plants);
       subscriber.onCompleted();
   });
Run Code Online (Sandbox Code Playgroud)

Ign*_*nte 2

在观看 Dan Lew 的有关常见 RxJava 错误的会议(错误扁平化列表)后,我发现了与此案例相关的常见错误。

因此,这种情况的解决方案如下。

realmResults.flatMap(list ->
            Observable.from(list)
                    .map(plantRealm -> toPlant.map(plantRealm))
                    .toList())
Run Code Online (Sandbox Code Playgroud)

这个视频太棒了,我强烈推荐观看。

如果我想从其他线程访问领域对象,我会遇到此解决方案的问题。我可以解决像这样的其他极端情况,但我仍然坚持这个。

代码

安慰

我解决了这个问题...

解决