使用java rx.Observable

时间:2018-06-22 14:45:40

标签: java observable reactive-programming rx-java2 rx-javafx

我有一个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调用也不处理响应。

1 个答案:

答案 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文档。