private static void SecondLargestItemWithAggregate()
{
Demo.DisplayHeader("The Aggregate operators - the resultSelector function transforms the final accumulator value into the result value");
Subject<int> numbers = new Subject<int>();
numbers.Aggregate(
new SortedSet<int>(),
(largest, item) =>
{
largest.Add(item);
if (largest.Count > 2)
{
largest.Remove(largest.First()); //keeping only the first two largest items
}
return largest;
},
largest => largest.FirstOrDefault()) //since the collection is sorted and contain two items at most, the first items is the second largest one
.SubscribeConsole();
numbers.OnNext(3);
numbers.OnNext(1);
numbers.OnNext(4);
numbers.OnNext(2);
numbers.OnCompleted();
}