从一个网络调用中获取数据的Observable中获取前5个item



我有以下代码从互联网获取项目列表。

Observable<RealmList<Artist>> popArtists = restInterface.getArtists();
    compositeSubscription.add(popArtists.subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread()).subscribe(artistsObserver));

问题是列表有80多个项目,我只想得到前5个项目。实现这一目标的最佳方式是什么?

take是您要查找的操作符。(参见这里的文档:http://reactivex.io/documentation/operators/take.html)

flatMapIterable转换你的RealmList(实现Iterable,这就是为什么flatMapIterable可以使用)到Observable,它发出你的列表的所有项目

Subscription subscription = restInterface.getArtists()
                                         .flatMapIterable(l -> l)
                                         .take(5)
                                         .subscribeOn(Schedulers.io())
                                         .observeOn(androidSchedulers.mainThread())
                                         .subscribe(artistsObserver);
compositeSubscription.add(subscription);

我猜你无法控制服务器端,所以解决方案是从收到的结果中取前5项:

Observable<RealmList<Artist>> popArtists = restInterface.getArtists();
compositeSubscription.add(
popArtists.flatMap(list-> Observable.from(list).limit(5)).subscribeOn(Schedulers.io())                      
.observeOn(AndroidSchedulers.mainThread())
.subscribe(artistsObserver));

相关内容

  • 没有找到相关文章

最新更新