我有以下代码从互联网获取项目列表。
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));