我有一个返回Observable<List<Long>>
的方法,该方法是某些项的ID。我想浏览此列表,并使用另一个返回Observable<Item>
的方法下载每个项目。目前,我正在通过以下代码进行操作。
@Override
public Observable<List<Item>> getResponses(List<Long> requests) {
return Observable.from(requests).
flatMap((Func1<Long, Observable<Item>>) restRequest -> getResponseEach(restRequest)).toList();
}
它工作正常,但是它可以返回所有响应,我的意思是当所有下载完成后,我的onNext()
被调用,
主要问题,但我还是需要一次成功地从服务器提取每个项目,然后逐个发出每个响应(任何订单),因此我的onNext
应该每次都被调用每个项目的时间。
我如何使用RxJava运算符来做到这一点?
答案 0 :(得分:1)
您必须删除toList()
运算符。 toList()
仅在完成上游所有发射后才发射,并且将收集结果并作为Single<List<YourResultObject>>
您可以在代码中返回flatMap
返回的observable,然后将得到结果的逐一显示,
public Observable<Item> getResponses(List<Long> requests) {
return Observable.fromIterable(requests)
.flatMap(restRequest -> getResponseEach(restRequest));
}
现在,您的getResponses
方法将返回Observable<Item>
而不是Observable<List<Item>>
您可以按以下方式订阅此功能
getResponses(ids)
.subscribe(new DisposableObserver<Item>() {
@Override
public void onNext(Item item) {
// each item will be received here one by one
}
@Override
public void onError(Throwable e) {
// handle any occured error during the operation
}
@Override
public void onComplete() {
// all operations completed
}
});