只發(fā)射最后一項(xiàng)(或者滿足某個(gè)條件的最后一項(xiàng))數(shù)據(jù)
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/last.c.png" alt="last" />
如果你只對(duì)Observable發(fā)射的最后一項(xiàng)數(shù)據(jù),或者滿足某個(gè)條件的最后一項(xiàng)數(shù)據(jù)感興趣,你可以使用Last
操作符。
在某些實(shí)現(xiàn)中,Last
沒(méi)有實(shí)現(xiàn)為一個(gè)返回Observable的過(guò)濾操作符,而是實(shí)現(xiàn)為一個(gè)在當(dāng)時(shí)就發(fā)射原始Observable指定數(shù)據(jù)項(xiàng)的阻塞函數(shù)。在這些實(shí)現(xiàn)中,如果你想要的是一個(gè)過(guò)濾操作符,最好使用TakeLast(1)
。
在RxJava中的實(shí)現(xiàn)是last
和lastOrDefault
。
可能容易混淆,BlockingObservable
也有名叫last
和lastOrDefault
的操作符,它們會(huì)阻塞并返回值,不是立即返回一個(gè)Observable。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/last.png" alt="last" />
只發(fā)射最后一項(xiàng)數(shù)據(jù),使用沒(méi)有參數(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" />
這個(gè)版本的last
也是接受一個(gè)謂詞函數(shù),返回一個(gè)發(fā)射原始Observable中滿足條件的最后一項(xiàng)數(shù)據(jù)的Observable。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/lastOrDefault.png" alt="last" />
lastOrDefault
與last
類(lèi)似,不同的是,如果原始Observable沒(méi)有發(fā)射任何值,它發(fā)射你指定的默認(rèn)值。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/lastOrDefault.p.png" alt="last" />
這個(gè)版本的lastOrDefault
可以接受一個(gè)謂詞函數(shù),如果有數(shù)據(jù)滿足條件,返回的Observable就發(fā)射原始Observable滿足條件的最后一項(xiàng)數(shù)據(jù),否則發(fā)射默認(rèn)值。
last
和lastOrDefault
默認(rèn)不在任何特定的調(diào)度器上執(zhí)行。