【问题标题】:RxJava: dynamically create Observables and send the final resut as ObservableRxJava:动态创建 Observables 并将最终结果作为 Observable 发送
【发布时间】:2016-08-29 07:04:46
【问题描述】:

我正在使用 RxJava,我想在其中根据某些条件动态创建许多 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中不同Observables发出的值进行一些操作,最后将其作为单个Observable&lt;String&gt;返回

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

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

但我知道这里的参数数量。请告诉我如何实现这一目标。

【问题讨论】:

    标签: java rx-java reactive-programming


    【解决方案1】:

    使用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(","));
        }));
    

    【讨论】:

    • 你能解释一下吗?像我怎样才能让单个字符串进行操作?
    • 我添加了一个示例用法。请记住,如果您不关心订单,也许merge 然后reduce 会更简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多