gpt4 book ai didi

java - RxJava迭代对象中的列表并返回对象

转载 作者:行者123 更新时间:2023-12-02 11:06:13 27 4
gpt4 key购买 nike

需要执行 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 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);
});
}

但它看起来不太好。如果有人可以帮助改进这一点,我们将不胜感激。

最佳答案

我会将下载逻辑嵌套到内部 Observable 中

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))
);
}

您可以访问同一 lambda 中的响应和下载的资源

关于java - RxJava迭代对象中的列表并返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50937183/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com