为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣染霜花 2023-05-24 16:21:49
不幸的是,我的 REST 删除操作仅适用于一项。所以我想做的是,Observable.just(items).flatMapIterable { items -> items }.flatMap {                //call REST DELETE for every item            }.flatMap {                // call REST GET            }问题是正在为每个项目调用 GET 调用。我如何等待完成所有删除完成然后执行 GET 调用?提前致谢。
查看完整描述

3 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

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


fun doTask(items: List<String>):Observable<Boolean>{

        return Observable.fromIterable(items)

                .flatMap { processItem(it) }

                .toList()

                .toObservable()

                .flatMap { finalTask() }

    }


查看完整回答
反对 回复 2023-05-24
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

这个问题可以用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 }

}


查看完整回答
反对 回复 2023-05-24
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

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

            }

        });


查看完整回答
反对 回复 2023-05-24
  • 3 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信