只發(fā)射最后一項(或者滿足某個條件的最后一項)數(shù)據(jù)
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/last.c.png" alt="last" />
如果你只對Observable發(fā)射的最后一項數(shù)據(jù),或者滿足某個條件的最后一項數(shù)據(jù)感興趣,你可以使用Last
操作符。
在某些實現(xiàn)中,Last
沒有實現(xiàn)為一個返回Observable的過濾操作符,而是實現(xiàn)為一個在當(dāng)時就發(fā)射原始Observable指定數(shù)據(jù)項的阻塞函數(shù)。在這些實現(xiàn)中,如果你想要的是一個過濾操作符,最好使用TakeLast(1)
。
在RxJava中的實現(xiàn)是last
和lastOrDefault
。
可能容易混淆,BlockingObservable
也有名叫last
和lastOrDefault
的操作符,它們會阻塞并返回值,不是立即返回一個Observable。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/last.png" alt="last" />
只發(fā)射最后一項數(shù)據(jù),使用沒有參數(shù)的last
操作符。
示例代碼
Observable.just(1, 2, 3)
.last()
.subscribe(new Subscriber<Integer>() {
@Override
public void onNext(Integer item) {
System.out.println("Next: " + item);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
輸出
Next: 3
Sequence complete.
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/last.p.png" alt="last" />
這個版本的last
也是接受一個謂詞函數(shù),返回一個發(fā)射原始Observable中滿足條件的最后一項數(shù)據(jù)的Observable。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/lastOrDefault.png" alt="last" />
lastOrDefault
與last
類似,不同的是,如果原始Observable沒有發(fā)射任何值,它發(fā)射你指定的默認(rèn)值。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/lastOrDefault.p.png" alt="last" />
這個版本的lastOrDefault
可以接受一個謂詞函數(shù),如果有數(shù)據(jù)滿足條件,返回的Observable就發(fā)射原始Observable滿足條件的最后一項數(shù)據(jù),否則發(fā)射默認(rèn)值。
last
和lastOrDefault
默認(rèn)不在任何特定的調(diào)度器上執(zhí)行。