过滤操作 - Last

优质
小牛编辑
131浏览
2023-12-01

Last

只发射最后一项(或者满足某个条件的最后一项)数据

last

如果你只对Observable发射的最后一项数据,或者满足某个条件的最后一项数据感兴趣,你可以使用Last操作符。

在某些实现中,Last没有实现为一个返回Observable的过滤操作符,而是实现为一个在当时就发射原始Observable指定数据项的阻塞函数。在这些实现中,如果你想要的是一个过滤操作符,最好使用TakeLast(1)

在RxJava中的实现是lastlastOrDefault

可能容易混淆,BlockingObservable也有名叫lastlastOrDefault的操作符,它们会阻塞并返回值,不是立即返回一个Observable。

过滤操作符

last

只发射最后一项数据,使用没有参数的last操作符。

示例代码

  1. Observable.just(1, 2, 3)
  2. .last()
  3. .subscribe(new Subscriber<Integer>() {
  4. @Override
  5. public void onNext(Integer item) {
  6. System.out.println("Next: " + item);
  7. }
  8. @Override
  9. public void onError(Throwable error) {
  10. System.err.println("Error: " + error.getMessage());
  11. }
  12. @Override
  13. public void onCompleted() {
  14. System.out.println("Sequence complete.");
  15. }
  16. });

输出

  1. Next: 3
  2. Sequence complete.

last

这个版本的last也是接受一个谓词函数,返回一个发射原始Observable中满足条件的最后一项数据的Observable。

last

lastOrDefaultlast类似,不同的是,如果原始Observable没有发射任何值,它发射你指定的默认值。

last

这个版本的lastOrDefault可以接受一个谓词函数,如果有数据满足条件,返回的Observable就发射原始Observable满足条件的最后一项数据,否则发射默认值。

lastlastOrDefault默认不在任何特定的调度器上执行。