Count

計算來源 Observable 發射的項目數量,並僅發射此值

Count 運算子會將發射項目的 Observable 轉換為發射單一值的 Observable,該值代表來源 Observable 發射的項目數量。

如果來源 Observable 以錯誤終止,Count 將傳遞此錯誤通知,而不會先發射項目。如果來源 Observable 完全沒有終止,Count 既不會發射項目也不會終止。

參見

特定語言資訊

RxClojure 具有此運算子的 countlongCount 變體,但這兩者實際上都回傳 long 值。

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 發射的所有項目,只需傳遞 count 一個總是回傳 true 的謂詞

範例程式碼

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。