讓我們再回到那個(gè)溫度傳感器。它每秒都會(huì)發(fā)射當(dāng)前室內(nèi)的溫度。說實(shí)話,我們并不認(rèn)為溫度會(huì)變化這么快,我們可以使用一個(gè)小的發(fā)射間隔。在Observable后面加一個(gè)sample(),我們將創(chuàng)建一個(gè)新的可觀測序列,它將在一個(gè)指定的時(shí)間間隔里由Observable發(fā)射最近一次的數(shù)值:
Observable<Integer> sensor = [...]
sensor.sample(30,TimeUnit.SECONDS)
.subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer currentTemperature) {
updateDisplay(currentTemperature)
}
});
例子中Observable將會(huì)觀測溫度Observable然后每隔30秒就會(huì)發(fā)射最后一個(gè)溫度值。很明顯,sample()支持全部的時(shí)間單位:秒,毫秒,天,分等等。
下圖中展示了一個(gè)間隔發(fā)射字母的Observable如何采樣一個(gè)發(fā)射數(shù)字的Observable。Observable的結(jié)果將會(huì)發(fā)射每個(gè)已發(fā)射字母的最后一組數(shù)據(jù):1,4,5.
http://wiki.jikexueyuan.com/project/rxjava/images/chapter4_13.png" alt="" />
如果我們想讓它定時(shí)發(fā)射第一個(gè)元素而不是最近的一個(gè)元素,我們可以使用throttleFirst()。