【发布时间】:2016-04-26 19:42:23
【问题描述】:
我尝试使用 Realm 和 RxJava 实现模式存储库。仓库接口有这样的签名
Observable<List<T>> query(Specification specification);
所以,当我使用 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);
}
);
但是类型检查系统还在抱怨....
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();
});
【问题讨论】:
-
RealmResults
没有实现 List 接口吗? -
@JohnWowUs 是的。但我想应该有更好的方法来做到这一点。我想是的,你指的是
new ArrayList<Plant>(Arrays.asList(realmResults.toArray()))。对吗? -
没有。我的意思是 RealmResults
已经实现了 List 。在here 查找课程。注意 List 是一个接口而不是一个类。