Spec-Zone.ru › ReactiveX

Сумма

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

Оператор Sum работает с Observable, испускающим числа (или элементы, которые могут быть оценены как числа), и испускает одно значение: сумму всех чисел, испускаемых исходным Observable.

См. также

  • Среднее
  • Введение в Rx: Мин, Макс, Сумма и Среднее
  • RxMarbles: sum

Информация для определённого языка

RxGroovy sumDouble sumFloat sumInteger sumLong StringObservable.join StringObservable.stringConcat

В RxGroovy этот оператор отсутствует в ядре ReactiveX, но является частью отдельного rxjava-math модуля, где он реализован четырьмя операторами, специфичными для типа: sumDouble, sumFloat, sumInteger, и sumLong. Следующий пример демонстрирует работу этих операторов:

Пример кода

def myObservable = Observable.create({ aSubscriber ->
  if(false == aSubscriber.isUnsubscribed()) aSubscriber.onNext(4);
  if(false == aSubscriber.isUnsubscribed()) aSubscriber.onNext(3);
  if(false == aSubscriber.isUnsubscribed()) aSubscriber.onNext(2);
  if(false == aSubscriber.isUnsubscribed()) aSubscriber.onNext(1);
  if(false == aSubscriber.isUnsubscribed()) aSubscriber.onCompleted();
});

Observable.sumInteger(myObservable).subscribe(
  { println(it); },                  // onNext
  { println("Error encountered"); }, // onError
  { println("Sequence complete"); }  // onCompleted
);
10
Sequence complete
sum

Вы также можете суммировать не сами элементы, а результаты применения функции к каждому элементу, как показано на иллюстрации выше, которая испускает сумму числа сторон фигур, испускаемых исходным Observable.

stringConcat

В отдельном StringObservable классе (не входит в RxGroovy по умолчанию) также есть оператор stringConcat, который преобразует Observable, испускающий последовательность строк, в Observable, испускающий одну строку, представляющую конкатенацию всех строк.

join

В отдельном StringObservable классе (не входит в RxGroovy по умолчанию) также есть оператор join, который преобразует Observable, испускающий последовательность строк, в Observable, испускающий одну строку, представляющую конкатенацию каждой из них, разделяемых строкой по вашему выбору.

RxJava 1․x sumDouble sumFloat sumInteger sumLong StringObservable.join StringObservable.stringConcat

Этот оператор отсутствует в ядре RxJava, но входит в отдельный rxjava-math модуль, где он реализован четырьмя операторами, специфичными для типа: sumDouble, sumFloat, sumInteger, и sumLong.

sum

Вы также можете суммировать не сами элементы, а результаты применения функции к каждому элементу, как показано на иллюстрации выше, которая испускает сумму числа сторон фигур, испускаемых исходным Observable.

stringConcat

В отдельном StringObservable классе (не входит в RxJava по умолчанию) также есть оператор stringConcat, который преобразует Observable, испускающий последовательность строк, в Observable, испускающий одну строку, представляющую конкатенацию всех строк.

join

В отдельном StringObservable классе (не входит в RxJava по умолчанию) также есть оператор join, который преобразует Observable, испускающий последовательность строк, в Observable, испускающий одну строку, представляющую конкатенацию каждой из них, разделяемых строкой по вашему выбору.

RxJS sum

sum

RxJS реализует этот оператор как sum. Следующий фрагмент кода показывает, как его использовать:

Пример кода

var source = Rx.Observable.range(0, 9).sum();

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

Вы также можете суммировать не сами элементы, а результаты применения функции к каждому элементу, как показано на иллюстрации выше, которая испускает сумму количества сторон фигур, испускаемых исходным Observable.

Пример кода

var arr = [
    { value: 1 },
    { value: 2 },
    { value: 3 }
];

var source = Rx.Observable.fromArray(arr).sum(function (x) {
    return x.value;
});

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

sum содержится в следующих дистрибутивах:

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

Он требует одного из следующих:

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

RxPHP sum

RxPHP реализует этот оператор как sum.

Вычисляет сумму последовательности значений

Пример кода

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

$source = Rx\Observable::range(1, 10)
    ->sum();

$subscription = $source->subscribe($stdoutObserver);
Next value: 55
Complete!

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

Spec-Zone.ru

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