【问题标题】:RxJava - Single of List<T> to CompletableRxJava - List<T> 的单个到 Completable
【发布时间】:2018-12-07 14:33:49
【问题描述】:

我有:
Single&lt;List&lt;T&gt;&gt;

我想在整个列表上同时运行一种方法,在列表的每个元素上同时运行另一种方法。这两个方法返回void,所以最后我想要Completable,当所有方法调用(n+1)都成功时完成。所有 n+1 调用应同时运行。

我怎样才能做到这一点?

【问题讨论】:

    标签: rx-java rx-java2


    【解决方案1】:

    我认为你需要这样的东西

    你有一个Single&lt;List&gt;(我用过Single&lt;List&lt;Integer&gt;&gt;) 说

    Single<List<Integer>> listSingle = Single.fromCallable(() -> Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
    

    1 : 使用Single&lt;List&lt;T&gt;&gt; 做某事的函数

    public Completable doSomthingWithList(Single<List<Integer>> listSingle) {
        return listSingle.flatMapCompletable(intList -> Completable.fromAction(() -> {
            // do something with intList
            System.out.println("doSomthingWithList");
        })).subscribeOn(Schedulers.io()); // doing this in a background thread
    }
    

    2:另一个对列表中的所有项目执行某些操作的函数

    public Completable doSomethingForEachItemInList(Single<List<Integer>> listSingle) {
        return listSingle.flatMapObservable(Observable::fromIterable)
                .flatMapCompletable(integer -> Completable.fromAction(() -> {
                    System.out.println("Doing somthing with list item " + integer);
                })).subscribeOn(Schedulers.io());
    }
    

    3:并行执行以上2个函数,并在这两个函数都完成时通知

     Completable.mergeArray(doSomthingWithList(listSingle), doSomethingForEachItemInList(listSingle))
                .subscribeWith(new DisposableCompletableObserver() {
                    @Override
                    public void onComplete() {
                        // all actions completed
                        System.out.println("All done!");
                    }
    
                    @Override
                    public void onError(Throwable e) {
                        System.out.println(e.getMessage());
                    }
                });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多