-
Notifications
You must be signed in to change notification settings - Fork 7.6k
Description
Hi,
In RxJava, reduce(Func2<T, T, T> accumulator) may be not implemented correctly. Now reduce is implemented using scan. When reducing on empty observable, it will invoke onCompleted and do nothing. This is against my expectation. I suppose that reducing an empty observable should throw an exception.
Actually, Scan and Aggregate(I think this is reduce in C#) have different behaviors in C#. Scan an empty observable will do nothing, but Aggregate will throw a System.InvalidOperationException.
Here are my test codes in C#.
Scan:
Observable.Empty<int>().Scan((x, y) => x + y).Subscribe(
x =>
Console.WriteLine("subscriber got " + x)
);Aggregate:
Observable.Empty<int>().Aggregate((x, y) => x + y).Subscribe(
x =>
Console.WriteLine("subscriber got " + x)
);I also tried the reduce method in other languages.
List[Int]().reduce(_ + _) will throw
java.lang.UnsupportedOperationException: empty.reduceLeft in scala.
reduce(lambda x, y: x + y, []) will throw reduce() of empty sequence with no initial value in python.
If reducing an empty observable throws an exception, we can implement min and max by reduce directly.