减少Observable <observable <t>&gt;到Observable <t>

时间:2016-06-06 20:20:29

标签: java android rx-java rx-android

我正在尝试使用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<>

2 个答案:

答案 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可以建议更好或只是不同的方法,请做...