RxJava i在对象中创建列表并返回该对象
需要执行api请求并下载响应返回的所有资产。 我有下面的逻辑,但不确定什么是正确的方式来完成这一点RxJava i在对象中创建列表并返回该对象,java,android,rx-java2,Java,Android,Rx Java2,需要执行api请求并下载响应返回的所有资产。 我有下面的逻辑,但不确定什么是正确的方式来完成这一点 public Observable<Response> prepareSomething() { return api.requestSomthing() .observeOn(Schedulers.io()) .flatMap(response -> Observable.fromIterable(response.ge
public Observable<Response> prepareSomething() {
return api.requestSomthing()
.observeOn(Schedulers.io())
.flatMap(response -> Observable.fromIterable(response.getAssetsList()))
.map(asset -> downloadAsset(asset, response.getSomeValue/*how?*/))
.someRxOperatorToRetrunResponseObject(/*how?*/);
}
public observeable prepareSomething(){
返回api.requestSomthing()
.observeOn(Schedulers.io())
.flatMap(response->Observable.fromIterable(response.getAssetsList()))
.map(资产->下载资产(资产,响应.getSomeValue/*如何?*/)
.SomerxOperator或TrunResponseObject(/*如何?*/);
}
实际上,我找到了一种方法来实现它,方法如下:
public Observable<Response> prepareSomething() {
return api.requestSomthing()
.observeOn(Schedulers.io())
.flatMap(response -> {
ArrayList<Observable<Asset>> observables = new ArrayList<>();
for(Asset asset : response.getAssetsList()){
Observable downloadOb = Observable.just(asset)
.map(assetToDownload-> downloadAsset(assetToDownload, response.getSomeValue()));
observables.add(downloadOb);
}
return Observable.zip(observables, objects -> response);
});
}
public observeable prepareSomething(){
返回api.requestSomthing()
.observeOn(Schedulers.io())
.flatMap(响应->{
ArrayList observables=新的ArrayList();
对于(资产:response.getAssetsList()){
Observable downloadOb=Observable.just(资产)
.map(assetToDownload->downloadAsset(assetToDownload,response.getSomeValue());
添加(下载OB);
}
return Observable.zip(Observable,objects->response);
});
}
但是它看起来不太好看。如果有人能帮助改进这一点,我将不胜感激。我将把下载逻辑嵌套到内部可观察性中
public Observable<Response> prepareSomething() {
return api.requestSomthing()
.observeOn(Schedulers.io())
.flatMap(response -> Observable.fromIterable(response.getAssetsList())
.flatMap( asset -> downloadAsset(asset))
.toList()
.flatMapObservable(downloadedAssets -> Observable.just(response))
);
}
public observeable prepareSomething(){
返回api.requestSomthing()
.observeOn(Schedulers.io())
.flatMap(response->Observable.fromIterable(response.getAssetsList())
.flatMap(资产->下载资产(资产))
托利斯先生()
.flatMapObservable(下载资产->Observable.just(响应))
);
}
您可以在同一lambda中访问响应和下载的资产