Сумма
вычисляет сумму чисел, испускаемых Observable, и испускает эту сумму
Оператор Sum работает с Observable, испускающим числа (или элементы, которые могут быть оценены как числа), и испускает одно значение: сумму всех чисел, испускаемых исходным Observable.
См. также
Информация для определённого языка
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
Вы также можете суммировать не сами элементы, а результаты применения функции к каждому элементу, как показано на иллюстрации выше, которая испускает сумму числа сторон фигур, испускаемых исходным Observable.
В отдельном StringObservable классе (не входит в RxGroovy по умолчанию) также есть оператор stringConcat, который преобразует Observable, испускающий последовательность строк, в Observable, испускающий одну строку, представляющую конкатенацию всех строк.
В отдельном StringObservable классе (не входит в RxGroovy по умолчанию) также есть оператор join, который преобразует Observable, испускающий последовательность строк, в Observable, испускающий одну строку, представляющую конкатенацию каждой из них, разделяемых строкой по вашему выбору.
RxJava 1․x sumDouble sumFloat sumInteger sumLong StringObservable.join StringObservable.stringConcat
Этот оператор отсутствует в ядре RxJava, но входит в отдельный rxjava-math модуль, где он реализован четырьмя операторами, специфичными для типа: sumDouble, sumFloat, sumInteger, и sumLong.
Вы также можете суммировать не сами элементы, а результаты применения функции к каждому элементу, как показано на иллюстрации выше, которая испускает сумму числа сторон фигур, испускаемых исходным Observable.
В отдельном StringObservable классе (не входит в RxJava по умолчанию) также есть оператор stringConcat, который преобразует Observable, испускающий последовательность строк, в Observable, испускающий одну строку, представляющую конкатенацию всех строк.
В отдельном StringObservable классе (не входит в RxJava по умолчанию) также есть оператор join, который преобразует Observable, испускающий последовательность строк, в Observable, испускающий одну строку, представляющую конкатенацию каждой из них, разделяемых строкой по вашему выбору.
RxJS 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
Вы также можете суммировать не сами элементы, а результаты применения функции к каждому элементу, как показано на иллюстрации выше, которая испускает сумму количества сторон фигур, испускаемых исходным 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.jsrx.all.compat.jsrx.aggregates.js
Он требует одного из следующих:
rx.jsrx.compat.jsrx.lite.jsrx.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