我有一个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
如何使用可观察性实现相同的目标?我想并行执行这些调用并填充我的公共地图myMap
我遇到了map(),flatMap() & zip(),但我看到的大多数示例都很简单,它们不会进行API调用并处理它们的响应。
发布于 2018-06-23 20:06:54
这取决于您使用的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文档。
https://stackoverflow.com/questions/50990476
复制相似问题