Last

仅发射 Observable 发射的最后一个项目(或满足某个条件的最后一个项目)。

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

在某些实现中,Last 不是作为返回 Observable 的过滤操作符实现的,而是作为在源 Observable 终止时返回特定项目的阻塞函数实现的。在这些实现中,如果您需要一个过滤操作符,您可能可以使用 TakeLast(1) 获得更好的结果。

另请参阅

特定语言信息

待定

在 RxGroovy 中,此过滤操作符实现为 lastlastOrDefault

有点令人困惑的是,还有一些名为 lastlastOrDefaultBlockingObservable 操作符会阻塞并返回项目,而不是立即返回 Observable。

过滤操作符

last

要过滤 Observable,使其仅发射最后一个发射,请使用不带参数的 last 操作符。

last

您也可以将谓词函数传递给 last,在这种情况下,它将生成一个 Observable,该 Observable 仅发射源 Observable 中谓词评估为 true 的最后一个项目。

lastOrDefault

lastOrDefault 操作符类似于 last,但您可以传递一个默认项目,如果源 Observable 无法发射任何项目,它可以发射该项目。

lastOrDefault

lastOrDefault 还有一个变体,您可以将谓词函数传递给它,这样它的 Observable 将发射源 Observable 中谓词评估为 true 的最后一个项目,或者如果源 Observable 发射的任何项目都没有通过谓词,则发射默认项目。

lastlastOrDefault 默认情况下不会在任何特定的 Scheduler 上操作。

BlockingObservable 方法

BlockingObservable 方法不会将 Observable 转换为另一个过滤的 Observable,而是会从 Observable 级联中退出,阻塞直到 Observable 发射所需的项目,然后返回该项目本身。

要将 Observable 转换为 BlockingObservable 以便您可以使用这些方法,您可以使用 Observable.toBlockingBlockingObservable.from 方法。

last

要检索 BlockingObservable 的最后一个发射,请使用不带参数的 last 方法。

last

您也可以将谓词函数传递给 last 方法,以检索满足谓词的 BlockingObservable 的最后一个发射。

lastOrDefault

与过滤操作符一样,BlockingObservablelast 方法将在源 BlockingObservable 中没有最后一个元素时抛出 NoSuchElementException。要在这种情况下返回默认项目,请使用 lastOrDefault 方法。

lastOrDefault

并且,与 last 一样,有一个 lastOrDefault 变体接受谓词函数作为参数,并检索满足该谓词的源 BlockingObservable 的最后一个项目,或者如果没有发射满足的项目,则检索默认项目。

在 RxJava 中,此过滤操作符实现为 lastlastOrDefault

有点令人困惑的是,还有一些名为 lastlastOrDefaultBlockingObservable 操作符会阻塞并返回项目,而不是立即返回 Observable。

过滤操作符

last

要过滤 Observable,使其仅发射最后一个发射,请使用不带参数的 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.
last

您也可以将谓词函数传递给 last,在这种情况下,它将生成一个 Observable,该 Observable 仅发射源 Observable 中谓词评估为 true 的最后一个项目。

lastOrDefault

lastOrDefault 操作符类似于 last,但您可以传递一个默认项目,如果源 Observable 无法发射任何项目,它可以发射该项目。

lastOrDefault

lastOrDefault 还有一个变体,您可以将谓词函数传递给它,这样它的 Observable 将发射源 Observable 中谓词评估为 true 的最后一个项目,或者如果源 Observable 发射的任何项目都没有通过谓词,则发射默认项目。

lastlastOrDefault 默认情况下不会在任何特定的 Scheduler 上操作。

BlockingObservable 方法

BlockingObservable 方法不会将 Observable 转换为另一个过滤的 Observable,而是会从 Observable 级联中退出,阻塞直到 Observable 发射所需的项目,然后返回该项目本身。

要将 Observable 转换为 BlockingObservable 以便您可以使用这些方法,您可以使用 Observable.toBlockingBlockingObservable.from 方法。

last

要检索 BlockingObservable 的最后一个发射,请使用不带参数的 last 方法。

last

您也可以将谓词函数传递给 last 方法,以检索满足谓词的 BlockingObservable 的最后一个发射。

lastOrDefault

与过滤操作符一样,BlockingObservablelast 方法将在源 BlockingObservable 中没有最后一个元素时抛出 NoSuchElementException。要在这种情况下返回默认项目,请使用 lastOrDefault 方法。

lastOrDefault

并且,与 last 一样,有一个 lastOrDefault 变体接受谓词函数作为参数,并检索满足该谓词的源 BlockingObservable 的最后一个项目,或者如果没有发射满足的项目,则检索默认项目。

last

RxJS 实现 last 操作符。它可以选择接受谓词函数作为参数,在这种情况下,它不会发射源 Observable 的最后一个项目,而是发射满足谓词的源 Observable 的最后一个项目。

谓词函数本身接受三个参数

  1. 源 Observable 中要过滤的项目(或不过滤的项目)
  2. 此项目在源 Observable 序列中的从零开始的索引
  3. 源 Observable 对象

示例代码

var source = Rx.Observable.range(0, 10)
    .last(function (x, idx, obs) { return x % 2 === 1; });

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 8
Completed

如果源 Observable 没有发射任何项目(或没有发射与谓词匹配的项目),last 将以“序列不包含任何元素。onError 通知终止。

如果您希望 Observable 在这种情况下发射一个默认值,您可以将第二个参数(名为 defaultValue)传递给 last

示例代码

var source = Rx.Observable.range(0, 10)
    .last(function (x, idx, obs) { return x > 42; }, 88 );

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 88
Completed

last 位于以下每个发行版中

  • rx.all.js
  • rx.all.compat.js
  • rx.aggregates.js

它需要以下发行版之一

  • rx.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js