當(dāng)我們不需要整個序列時,而是只想取開頭或結(jié)尾的幾個元素,我們可以用take()或takeLast()。
如果我們只想要一個可觀測序列中的前三個元素那將會怎么樣,發(fā)射它們,然后讓Observable完成嗎?take()函數(shù)用整數(shù)N來作為一個參數(shù),從原始的序列中發(fā)射前N個元素,然后完成:
private void loadList(List<AppInfo> apps) {
mRecyclerView.setVisibility(View.VISIBLE);
Observable.from(apps)
.take(3)
.subscribe(new Observer<AppInfo>() {
@Override
public void onCompleted() {
mSwipeRefreshLayout.setRefreshing(false);
}
@Override
public void onError(Throwable e) {
Toast.makeText(getActivity(), "Something went wrong!", Toast.LENGTH_SHORT).show();
mSwipeRefreshLayout.setRefreshing(false);
}
@Override
public void onNext(AppInfo appInfo) {
mAddedApps.add(appInfo);
mAdapter.addApplication(mAddedApps.size() - 1,appInfo);
}
});
}
下圖中展示了發(fā)射數(shù)字的一個可觀測序列。我們對這個可觀測序列應(yīng)用take(2)函數(shù),然后我們創(chuàng)建一個只發(fā)射可觀測源的第一個和第二個數(shù)據(jù)的新序列。
http://wiki.jikexueyuan.com/project/rxjava/images/chapter4_2.png" alt="" />
如果我們想要最后N個元素,我們只需使用takeLast()函數(shù):
Observable.from(apps)
.takeLast(3)
.subscribe(...);
正如聽起來那樣不值一提,值得注意的是因為takeLast()方法只能作用于一組有限的序列(發(fā)射元素),它只能應(yīng)用于一個完整的序列。
下圖中展示了如何從可觀測源中發(fā)射最后一個元素來創(chuàng)建一個新的序列:
http://wiki.jikexueyuan.com/project/rxjava/images/chapter4_3.png" alt="" />
下圖中展示了我們在已安裝的應(yīng)用列表使用take()和takeLast()函數(shù)后發(fā)生的結(jié)果:
http://wiki.jikexueyuan.com/project/rxjava/images/chapter4_4.png" alt="" />