我想从我的存储库中检索对象列表,然后在实际有机会使用检索到的列表之前清除我的存储库的内容。目前,我有几个交错的平面 map ,但我想有更好的方法来做到这一点。这就是我的 Observables 链的样子:
mQueuedCallsRepository.getAll()
.flatMap(new Func1<QueuedCallModel[], Observable<QueuedCallModel[]>>() {
@Override
public Observable<QueuedCallModel[]> call(final QueuedCallModel[] queuedCallModels) {
return mQueuedCallsRepository.clear()
.doOnNext(new Action1<Void>() {
@Override
public void call(Void aVoid) {
disableReceiver(context);
}
})
.flatMap(new Func1<Void, Observable<QueuedCallModel[]>>() {
@Override
public Observable<QueuedCallModel[]> call(Void aVoid) {
return Observable.just(queuedCallModels);
}
});
}
})
.subscribeOn(Schedulers.io());
有什么想法可以简化它吗?
最佳答案
你的代码很好。唯一的优化是内部 flatMap
,它可以只是一个 map
。
mQueuedCallsRepository.getAll()
.subscribeOn(Schedulers.io())
.flatMap(queuedCallModels -> {
return mQueuedCallsRepository.clear()
.doOnNext(aVoid -> disableReceiver(context))
.map( aVoid -> queuedCallModels);
});
逻辑如下:
- 获取所有数据并在IO线程中运行操作
- 当你清楚数据时(他们)
- 清除操作成功后禁用接收器
- 然后返回之前获取的所有数据
关于java - 简化交错的 flatMap Observables 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35343464/