Contains

确定一个 Observable 是否发出特定的项目。

将一个特定的项目传递给 Contains 操作符,它返回的 Observable 将在源 Observable 发出该项目时发出 true,或者在源 Observable 终止而没有发出该项目时发出 false

一个相关的操作符,IsEmpty 返回一个 Observable,当且仅当源 Observable 在没有发出任何项目的情况下完成时,它发出 true。如果源 Observable 发出一个项目,则它发出 false

另请参阅

特定语言的信息

待定

contains

RxGroovy 将此操作符实现为 contains。默认情况下,它不会对任何特定的 调度器 进行操作。

exists

RxGroovy 还实现了 exists 操作符。它类似于 contains,但它会将源 Observable 发出的项目与您提供的谓词函数进行测试,而不是测试它们与特定对象的同一性。如果源 Observable 发出一个满足谓词函数的项目,则从 exists 返回的 Observable 将返回 true,如果它在没有发出此类项目的情况下完成,则返回 false

默认情况下,它不会对任何特定的 调度器 进行操作。

isEmpty

RxGroovy 还实现了 isEmpty 操作符。从 isEmpty 返回的 Observable 将在源 Observable 发出一个项目时返回 false,如果它在没有发出项目的情况下完成,则返回 true

默认情况下,它不会对任何特定的 调度器 进行操作。

contains

RxJava 将此操作符实现为 contains。默认情况下,它不会对任何特定的 调度器 进行操作。

exists

RxJava 还实现了 exists 操作符。它类似于 contains,但它会将源 Observable 发出的项目与您提供的谓词函数进行测试,而不是测试它们与特定对象的同一性。如果源 Observable 发出一个满足谓词函数的项目,则从 exists 返回的 Observable 将返回 true,如果它在没有发出此类项目的情况下完成,则返回 false

默认情况下,它不会对任何特定的 调度器 进行操作。

isEmpty

RxJava 还实现了 isEmpty 操作符。从 isEmpty 返回的 Observable 将在源 Observable 发出一个项目时返回 false,如果它在没有发出项目的情况下完成,则返回 true

默认情况下,它不会对任何特定的 调度器 进行操作。

contains

RxJS 中的 contains 操作符接受一个可选的第二个参数:一个从零开始的索引,用于在源 Observable 序列中开始搜索项目。

示例代码

/* Without an index */
var source = Rx.Observable.of(42)
  .contains(42);

var subscription = source.subscribe(
  function (x) { console.log('Next: %s', x); },
  function (err) { console.log('Error: %s', err); },
  function () { console.log('Completed'); });
Next: true
Completed
/* With an index */
var source = Rx.Observable.of(1,2,3)
  .contains(2, 1);

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

contains 存在于以下发行版中

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

它需要以下发行版之一

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

RxJS 中的 indexOf 操作符类似于 contains,但它不是返回发出 truefalse 的 Observable,而是返回一个发出源 Observable 序列中项目索引的 Observable,或者在没有发出此类项目的情况下返回 −1

indexOf 操作符接受一个可选的第二个参数:一个从零开始的索引,用于在源 Observable 序列中开始搜索项目。结果 Observable 发出的索引值将相对于此起点,而不是相对于序列的开头。

示例代码

/* Without an index */
var source = Rx.Observable.of(42)
  .indexOf(42);

var subscription = source.subscribe(
  function (x) { console.log('Next: %s', x); },
  function (err) { console.log('Error: %s', err); },
  function () { console.log('Completed'); });
Next: 0 
Completed
/* With an index */
var source = Rx.Observable.of(1,2,3)
  .indexOf(2, 1);

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

indexOf 存在于以下发行版中

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

它需要以下发行版之一

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

RxJS 中的 findIndex 操作符以谓词函数作为参数。它返回一个 Observable,该 Observable 或者发出单个数字(源 Observable 序列中第一个匹配谓词的项目的从零开始的索引),或者在没有此类项目匹配的情况下发出 −1

谓词函数接受三个参数

  • 源 Observable 发出的项目
  • 该项目的从零开始的索引
  • 源 Observable 本身

您还可以将一个对象传递给 findIndex 作为可选的第二个参数,该对象将作为“this”提供给谓词函数。

示例代码

/* Found an element */
var array = [1,2,3,4];

var source = Rx.Observable.fromArray(array)
    .findIndex(function (x, i, obs) {
        return x === 1;
    });

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 0
Completed
/* Not found */
var array = [1,2,3,4];

var source = Rx.Observable.fromArray(array)
    .findIndex(function (x, i, obs) {
        return x === 5;
    });

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

findIndex 存在于以下发行版中

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

它需要以下发行版之一

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

RxJS 还实现了 isEmpty 操作符。从 isEmpty 返回的 Observable 将在源 Observable 发出一个项目时返回 false,如果它在没有发出项目的情况下完成,则返回 true

示例代码

/* Not empty */
var source = Rx.Observable.range(0, 5)
    .isEmpty()

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: false
Completed
/* Empty */
var source = Rx.Observable.empty()
    .isEmpty()

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

isEmpty 存在于以下发行版中

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

它需要以下发行版之一

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

RxPHP 将此操作符实现为 isEmpty

如果源 Observable 为空,它将返回一个发出 true 的 Observable,否则它将发出 false

示例代码

//from https://github.com/ReactiveX/RxPHP/blob/master/demo/isEmpty/isEmpty.php

$source = \Rx\Observable::emptyObservable()
    ->isEmpty();

$source->subscribe($stdoutObserver);

   
Next value: 1
Complete!
    
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/isEmpty/isEmpty-false.php

$source = \Rx\Observable::just(1)
    ->isEmpty();

$source->subscribe($stdoutObserver);

   
Next value: 0
Complete!