2016-08-29 27 views
1

我正在使用RxJava,我想根据某些条件动态创建一些Observable。一旦完成创建,我想对observables返回的不同值进行一些处理,然后将其作为单个Observable发送给我可以订阅的对象。这里是我的代码是如何:RxJava:动态创建Observables并将最终的resut作为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.zip()返回它作为一个单一Observable<String>

一样,我可以这样做

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

但我知道这里的参数数量。请让我知道我能做到这一点。

回答

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(",")); 
    })); 
+0

能否请您解释一下吗?比如我如何获得单个字符串来执行操作? – v1shnu

+0

我已经添加了一个示例用法。请记住,如果你不关心顺序,也许'合并',那么'reduce'会更简单。 –

+0

谢谢你。这很好用! – v1shnu