Java 减少可观察到的<;可观察<;T>&燃气轮机;可观察<;T>;
我正在尝试使用RxJava调度程序从后台数据库中获取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
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))