减少 Observable<Observable<T>> 到 Observable<T>
reduce Observable<Observable<T>> to Observable<T>
我正在尝试使用 RxJava 调度程序在后台从数据库中获取 EventShift
s 的列表:
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<>
?
这就是我最后做的事情:
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) {
//...
}
})
如果有任何人可以提出更好的或不同的方法,请做...
您需要规范方法,即 defer
:
Observable<List<EventShift>> obs = Observable.defer(() -> shiftDb.getAll());
defer
将在每次订阅 Observable 时调用 lambda/method/Func0。
我正在尝试使用 RxJava 调度程序在后台从数据库中获取 EventShift
s 的列表:
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<>
?
这就是我最后做的事情:
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) {
//...
}
})
如果有任何人可以提出更好的或不同的方法,请做...
您需要规范方法,即 defer
:
Observable<List<EventShift>> obs = Observable.defer(() -> shiftDb.getAll());
defer
将在每次订阅 Observable 时调用 lambda/method/Func0。