RxJava:动态创建Observable并将最终的resut作为Observable

时间:2016-08-29 07:04:46

标签: java rx-java reactive-programming

我正在使用RxJava,我希望根据某些条件动态创建一些Observable。一旦我完成了创建,我想对observable返回的不同值进行一些处理,然后作为我可以订阅的单个Observable发送。以下是我的代码:

List<String> valueList = .... 

List<Observable<String>> listOfObservables = new ArrayList<Observable<String>>();

for(int i =; i <valueList.size(); i++){
        listOfObservables.add(new SomeClass.doOperation(valueList(i)));
        // SomeClass.doOperation will return an Observable<String>
    }

return Observable.merge(listOfObservables);

但是在这里,我想对listOfObservable中不同Observable发出的值进行一些操作,最后将其作为单个Observable<String>

返回

Observable.zip()一样,我可以像

那样做
return Observable.zip(observable1, observable2, (string1, string2) -> {
            // joining final string here
            return string1 + string2;

但我知道这里的论点数量。请让我知道如何实现这一目标。

1 个答案:

答案 0 :(得分:0)

使用zip重载that takes a variable number of arguments,它的签名为

<R> Observable<R> zip(Iterable<? extends Observable<?>> ws,
                      FuncN<? extends R> zipFunction)

使用示例:

List<String> valueList = .... 

return Observable.from(valueList)
    .map(string -> SomeClass.doOperationThatReturnsObservable(string))
    .toList()
    .flatMap(listOfObs -> Observable.zip(listOfObs, (Object[] results) -> {
       // do something with the strings in the array.
       return Arrays.stream(results)
                    .map(Object::toString)
                    .collect(Collectors.joining(","));
    }));