我有一个Set<Object>
,对于Set
中的每个条目,我必须进行API调用,并将其作为参数传递。而且我必须处理每个响应,并使用自己的逻辑填充另一个Map
示例顺序执行:
List<MyResponse> responses = newArrayList<>();
Set<StoreNode> nodes = // Assume we have a Set
nodes.forEach(storeNode -> responses.add(myAPI.myMethod(storeNode.getId()));
responses.forEach(response -> processResponse(response, myMap); // This is a common map & I have some custom logic to populate this map
如何使用Observables实现相同目标?我想并行进行这些调用并填充我的通用地图myMap
我遇到了map(),flatMap()和zip(),但是我看到的大多数示例都是简单的示例,它们没有进行API调用也不处理响应。
答案 0 :(得分:0)
这取决于您使用的RxJava版本。如果它的版本早于2.0.5,则需要执行flatMap
,在其中创建另一个Observable
,并确保其中的所有内容都是复杂的。请参见StackOverflow上的this answer。
否则,建议您使用Flowable
,然后使用parallel()
运算符将Flowable
更改为ParallelFlowable
。
所以您可以这样:
Flowable.fromIterable(nodes)
.parallel() // you can also specify number of rails here
.runOn(Schedulers.computation())
.map(node -> myAPI.myMethod(node.getId()))
.sequential()
.subscribe(
response -> processResponse(response, myMap),
error -> log(error)
);
有关更多信息,请参见Parallel flows文档。