Java 减少可观察到的<;可观察<;T>&燃气轮机;可观察<;T>;

Java 减少可观察到的<;可观察<;T>&燃气轮机;可观察<;T>;,java,android,rx-java,rx-android,Java,Android,Rx Java,Rx Android,我正在尝试使用RxJava调度程序从后台数据库中获取EventShifts的列表,如下所示: Observable.fromCallable(new Callable<Observable<EventShift>>() { @Override public Observable<EventShift> call() throws Exception { return Observa

我正在尝试使用RxJava调度程序从后台数据库中获取
EventShift
s的列表,如下所示:

Observable.fromCallable(new Callable<Observable<EventShift>>() {
            @Override
            public Observable<EventShift> call() throws Exception {
                return Observable.from(shiftDb.getAll());
            }
        })
Observable.fromCallable(newcallable(){
@凌驾
公共可观察调用()引发异常{
返回Observable.from(shiftDb.getAll());
}
})
编辑:只是为了清除,我想稍后使用flatMap对每个
EventShift
对象进行操作,所以我需要
Observable

由于我对RxJava还很陌生,第一个问题是-有没有更好的方法来避免
可见的


即使有更好的方法,我如何将
可观察的
减少到
可观察的

这就是我最后要做的:

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) {
                //...
            }
        })
Observable.fromCallable(newcallable(){
@凌驾
公共列表调用()引发异常{
返回shiftDb.getAll();
}
}).flatMap(新函数1(){
@凌驾
公共可观察呼叫(列表事件转移){
可观察到的返回(事件转移);
}
}).map(新函数1(){
@凌驾
公共…呼叫(EventShift EventShift){
//...
}
})

如果有任何1可以建议更好的方法或只是不同的方法,请执行…

您想要的是规范方法,即
延迟

Observable<List<EventShift>> obs = Observable.defer(() -> shiftDb.getAll());
Observable obs=Observable.defer(()->shiftDb.getAll());

defer
将在每次订阅可观察对象时调用lambda/method/Func0。

不需要内部可观察对象:
Observable.fromCallable(new Callable…
Retourn shiftdb.getall,而不是Observable.from。更新匿名类签名(否则它将无法编译)@zapl但是我会在想要可观察的时候得到可观察的。从(shiftDb.getAll())开始,仅仅可观察有什么问题?@yurgis shiftDb.getAll()将在同一个线程中执行,而不是在后台的调度程序中执行。shiftDb.getAll()可能需要时间来执行您唯一可以做得“更好”的事情是用来将难看的多行平面图调用转换为简单的
.flatMap(eventShifts->Observable.from(eventShifts))