Spec-Zone.ru › ReactiveX

Подсчет

подсчитать количество элементов, испущенных исходным Observable, и вывести только это значение
Открыть интерактивную диаграмму на rxmarbles.com

Оператор Count преобразует Observable, испускающий элементы, в Observable, испускающий единственное значение, представляющее количество элементов, испущенных исходным Observable.

Если исходный Observable завершается ошибкой, Count передаст это уведомление об ошибке без предварительного испускания элемента. Если исходный Observable вообще не завершается, Count не будет ни испускать элемент, ни завершаться.

См. также

  • Введение в Rx: Подсчет
  • RxMarbles: count

Сведения о языке

RxClojure count longCount

RxClojure имеет варианты этого оператора count и longCount, но оба на самом деле возвращают длинные значения.

RxCpp count

RxCpp реализует этот оператор как count.

RxGroovy count countLong

В RxGroovy оператор называется count и Observable, которое он создает, испускает целое число. Также существует countLong, Observable которого испускает длинное целое число.

Пример кода

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
  • Javadoc: count()
  • Javadoc: countLong()

RxJava 1․x count countLong

В RxJava оператор называется count и Observable, которое он создаёт, испускает целое число. Также существует countLong , Observable которого испускает длинное целое число.

Пример кода

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

RxJS count

В RxJS оператор count подсчитывает количество элементов в исходном Observable, которые удовлетворяют заданному предикату. Этот предикат принимает вид функции, которая принимает три параметра:

  1. испускаемый элемент
  2. индекс этого элемента в последовательности испускаемых элементов
  3. исходный Observable

Если функция предиката возвращает true, count увеличит счет элементов, которые он будет сообщать, когда исходный 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

RxKotlin реализует этот оператор как count.

Пример кода

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

RxNET Count LongCount

В Rx.NET Observable, создаваемый этим оператором, испускает целое число, но также существует LongCount , Observable которого испускает длинное целое число. В обоих вариантах вы можете либо передать исходный Observable в оператор в качестве параметра, либо вызвать оператор как метод экземпляра исходного Observable (в этом случае вы пропускаете параметр).

RxPHP count

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

В RxPY у вас есть возможность передать count предикат, который принимает в качестве параметра элемент, испущенный исходным Observable. Если вы это сделаете, count будет испускать подсчет только тех элементов из исходного Observable, которые предикат оценивает как true. В противном случае он будет испускать подсчет всех элементов, испускаемых исходным Observable.

Пример кода

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

Rxrb count

В Rx.rb у вас есть возможность передать count предикат, который принимает в качестве параметра элемент, испущенный исходным Observable. Если вы это сделаете, count будет испускать подсчет только тех элементов из исходного Observable, которые предикат оценивает как true. В противном случае он будет испускать подсчет всех элементов, испущенных исходным Observable.

RxScala count length longCount size

В RxScala оператор count подсчитывает количество элементов в исходном Observable, которые удовлетворяют заданному предикату. Этот предикат принимает испущенный элемент в качестве параметра и возвращает логическое значение. count будет испускать подсчет всех элементов, для которых этот предикат вернул true.

Используйте length или size вместо этого, если вы хотите подсчитать все элементы, испускаемые исходным Observable, и испустить этот подсчет как целое число, или используйте longCount для испускания его как длинного целого числа.

© ReactiveX contributors
Licensed under the Apache License 2.0.
http://reactivex.io/documentation/operators/count.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API