我正在尝试使用RxJava调度程序在后台从数据库中获取EventShift
的列表,如下所示:
Observable.fromCallable(new Callable<Observable<EventShift>>() {
@Override
public Observable<EventShift> call() throws Exception {
return Observable.from(shiftDb.getAll());
}
})
编辑:只是为了清除我想稍后使用flatMap对每个EventShift
对象采取行动,所以我需要Observable<EventShift>
......
由于我对RxJava不熟悉,首先要问的是 - 是否有更好的方法来避免Observable<Observable<>>
?
即使有更好的方法,我如何将Observable<Observable<>>
缩减为Observable<>
?
答案 0 :(得分:1)
您需要规范方法,即defer
:
Observable<List<EventShift>> obs = Observable.defer(() -> shiftDb.getAll());
每次Observable订阅时, defer
都会调用lambda / method / Func0。
答案 1 :(得分:0)
这就是我最终做的事情:
Observable.fromCallable(new Callable<List<EventShift>>() {
@Override
public List<EventShift> call() throws Exception {
return shiftDb.getAll();
}
}).flatMap(new Func1<List<EventShift>, Observable<EventShift>>() {
@Override
public Observable<EventShift> call(List<EventShift> eventShifts) {
return Observable.from(eventShifts);
}
}).map(new Func1<EventShift, ...>() {
@Override
public ... call(EventShift eventShift) {
//...
}
})
如果任何1可以建议更好或只是不同的方法,请做...