减少 Observable<Observable<T>> 到 Observable<T>

reduce Observable<Observable<T>> to Observable<T>

我正在尝试使用 RxJava 调度程序在后台从数据库中获取 EventShifts 的列表:

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。