Count

统计源 Observable 发出的项目的数量,只发出这个值

Count 运算符将发出项目的 Observable 转换为一个发出单个值的 Observable,该值代表源 Observable 发出的项目数量。

如果源 Observable 以错误结束,Count 将在发出项目之前传递此错误通知。如果源 Observable 根本不结束,Count 不会发出项目,也不会结束。

另请参见

特定于语言的信息

RxClojure 有这个运算符的 countlongCount 变体,但实际上这两个都返回长整型值。

RxCpp 将此运算符实现为 count

在 RxGroovy 中,运算符称为 count,它创建的 Observable 发出 Integer 值。还有一个 countLong,它的 Observable 发出 Long 值。

示例代码

def myObservable = Observable.create({ aSubscriber ->
  if(false == aSubscriber.isUnsubscribed()) aSubscriber.onNext('Three');
  if(false == aSubscriber.isUnsubscribed()) aSubscriber.onNext('Two');
  if(false == aSubscriber.isUnsubscribed()) aSubscriber.onNext('One');
  if(false == aSubscriber.isUnsubscribed()) aSubscriber.onCompleted();
});

myObservable.count().subscribe(
   { println(it); },                          // onNext
   { println("Error: " + it.getMessage()); }, // onError
   { println("Sequence complete"); }          // onCompleted
);
3
Sequence complete

在 RxJava 中,运算符称为 count,它创建的 Observable 发出 Integer 值。还有一个 countLong,它的 Observable 发出 Long 值。

示例代码

String[] items = new String[] { "one", "two", "three" };
assertEquals( new Integer(3), Observable.from(items).count().toBlocking().single() );

在 RxJS 中,count 运算符统计源 Observable 中满足指定谓词的项目的数量。该谓词采用一个函数的形式,该函数接受三个参数

  1. 发出的项目
  2. 该项目在发出项目序列中的索引
  3. 源 Observable

如果谓词函数返回 truecount 将增加它将在源 Observable 完成时报告的项目的计数。如果你想统计源 Observable 发出的所有项目,只需传递一个始终返回 true 的谓词给 count

示例代码

numberOfItems = someObservable.count(function() { return true; });

count 是以下包的一部分

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

count 需要以下任意一个包

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

RxKotlin 将此运算符实现为 count

示例代码

val list = listOf(1, 2, 3, 4, 5)
assertEquals( 5, Observable.from(list)!!.count()!!.toBlocking()!!.single() )

在 Rx.NET 中,此运算符创建的 Observable 发出 Integer 值,但还有一个 LongCount,它的 Observable 发出 Long 值。对于这两个变体,你可以将源 Observable 作为参数传递给运算符,也可以将运算符作为源 Observable 的实例方法调用(在这种情况下,你省略参数)。

RxPHP 将此运算符实现为 count

返回一个 observable 序列,其中包含一个值,该值代表指定 observable 序列中满足条件(如果提供)的元素数量,否则为项目的数量。

示例代码

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

$source = \Rx\Observable::fromArray(range(1, 10));

$subscription = $source->count()->subscribe($stdoutObserver);

   
Next value: 10
Complete!
    

在 RxPY 中,你可以选择向 count 传递一个谓词,该谓词将源 Observable 发出的项目作为参数。如果你这样做,count 仅发出源 Observable 中谓词评估为 true 的项目的计数。否则,它将发出源 Observable 发出的所有项目的计数。

示例代码

numberOfItems = someObservable.count()
numberOfNegativeItems = someObservable.count(lambda x: x < 0)

在 Rx.rb 中,你可以选择向 count 传递一个谓词,该谓词将源 Observable 发出的项目作为参数。如果你这样做,count 仅发出源 Observable 中谓词评估为 true 的项目的计数。否则,它将发出源 Observable 发出的所有项目的计数。

在 RxScala 中,count 运算符统计源 Observable 中满足指定谓词的项目的数量。该谓词接受一个发出的项目作为参数并返回一个布尔值。count 将发出该谓词返回 true 的所有项目的计数。

如果你想统计源 Observable 发出的所有项目并将此计数作为 Integer 发出,请使用 lengthsize,或者使用 longCount 将其作为 Long 发出。