如何将可完成任务列表组合成一个可完成结果?

How to combine list of Completable tasks into one Completable result?

我有一个 return 是 Single<List<Item>> 的方法,我想获取此列表中的每个项目并将其传递到下游 return 是 [=12] 的方法=].我想等到每个项目都成功完成并且 return 一个 Completable 结果。我最初的方法是使用 flatMapIterable 单独处理每个项目并使用 toList 合并结果,但我无法在 Completable 对象上调用 toList。有没有其他方法可以以这种方式将许多 Completable 任务 "aggregate" 合并为一个 Completable 任务?这是我目前所拥有的:

public Single<List<Item>> getListOfItems() {
    ...
}

public Completable doSomething(Item item) {
    ...
}

public Completable processItems() {
    return getListOfItems()     
        .toObservable()
        .flatMapIterable(items -> items)
        .flatMapCompletable(item -> doSomething(item))
        .toList()    // ERROR: No method .toList() for Completable
        .ignoreElements();
}

flatMapCompletable 运算符可以解决问题,您无需进一步应用其他运算符。

来自文档:

Maps each element of the upstream Observable into CompletableSources, subscribes to them and waits until the upstream and all CompletableSources complete.

flatMapCompletable 将 return Completable 将在所有映射的 Completables 完成其操作时完成:

 public Completable processItems() {
    return getListOfItems()
            .toObservable()
            .flatMapIterable(items -> items)
            .flatMapCompletable(item -> doSomething(item));
}