RxJava - 单曲<T>列表到可组合



我有:
Single<List<T>>

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

我怎样才能做到这一点?

我想你需要这样的

你有一个Single<List>(我用过Single<List<Integer>>(比如

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

1:一个用Single<List<T>>做某事的函数

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:并行执行上述两个功能,并在这两个功能都完成时通知

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());
}
});

最新更新