对列表中的所有项目执行一个任务,然后在 RxJava 中执行另一个任务

Perform a task for all items in a list and then perform another task in RxJava

不幸的是,我的 REST 删除操作仅适用于一项。所以我想做的是,

Observable.just(items).flatMapIterable { items -> items }.flatMap {
                //call REST DELETE for every item
            }.flatMap {
                // call REST GET
            }

问题是正在为每个项目调用 GET 调用。我如何等待完成所有删除完成然后执行 GET 调用?

提前致谢。

在你的情况下,你可以这样申请toList()

fun doTask(items: List<String>):Observable<Boolean>{
        return Observable.fromIterable(items)
                .flatMap { processItem(it) }
                .toList()
                .toObservable()
                .flatMap { finalTask() }
    }

问题可以用zip解决。如果有人想要这个

fun doTask(items: ArrayList<String>): Observable<Boolean> {
    val list = arrayListOf<Observable<String>>()
    items.forEach {
        list.add(processItem(it))
    }
    return Observable.zip(list) {
    }.flatMap {
        finalTask()
    }
}

fun processItem(s: String): Observable<String> {
    print(s)
    return Observable.just(s.toUpperCase())
}

fun finalTask(): Observable<Boolean> {
    print("final")
    return Observable.fromCallable { true }
}
Observable.just("one", "two", "three", "four", "five").subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                Log.d("ffff", s);//print: one, two, three, four, five
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) throws Exception {

            }
        }, new Action() {
            @Override
            public void run() throws Exception {
                Log.d("ffff", "complete");//print: complete
            }
        });