RxJava(四)from和toList

假设这样一种情况,有一个元素都是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的强大。

你可能感兴趣的:(RxJava(四)from和toList)