RxJava(四)from和toList

作者: 请你吃鱼 | 来源:发表于2016-08-30 11:21 被阅读1475次

假设这样一种情况,有一个元素都是id的数组,我们需要用这些id分别获取对应的内容,然后把这些内容再放进一个集合中最后显示在ListView上应该怎么办?如果只是用Retrofit我们需要循环使用这些id来请求,那如果用RxJava是什么样呢?

ApiManger apiManger = RetrofitHelper.getManger();
        Observable.from(ids)
                .flatMap(id -> apiManger.getInfo(id))
                .toList()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(infoModels -> {
                    Logger.e(infoModels.get(1).getData().getTitle());
                }, throwable -> Logger.e(throwable.toString()));

我们使用from操作符对id数组进行循环,然后把每个id作为参数再去请求内容,再调用toList把循环请求下来的内容生成一个List。
当然这个id数组同样也可以是从网络请求下来的

ApiManger apiManger = RetrofitHelper.getManger();
        apiManger.getIds()
                .flatMap(idModel -> Observable.from(idModel.getIds()))
                .flatMap(id -> apiManger.getInfo(id))
                .toList()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(infoModels -> {
                    Logger.e(infoModels.get(1).getData().getTitle());
                }, throwable -> Logger.e(throwable.toString()));

从这里我们也可以看到flatMap的强大。

相关文章

网友评论

  • JiaJJ:因为 flatMap 内部是一个异步操作,最后得到的 infoModels 的顺序,很可能和最开始的 ids 顺序不一致,请问这个怎么解决。
    请你吃鱼: @JiaJJ 可以试一下concatMap
  • DorisSunny: 有没有github上面的demo呢?或者源码。:grin:
    DorisSunny:@请你吃翔 恩,好的。感谢分享
    请你吃鱼: @DorisGM 现在还没有

本文标题:RxJava(四)from和toList

本文链接:https://www.haomeiwen.com/subject/bumfettx.html