RxJava i在对象中创建列表并返回该对象

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

需要执行api请求并下载响应返回的所有资产。 我有下面的逻辑,但不确定什么是正确的方式来完成这一点

 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中访问响应和下载的资产