BasicAggregateOperators.Program.SecondLargestItemWithAggregate C# (CSharp) Method

SecondLargestItemWithAggregate() private static method

private static SecondLargestItemWithAggregate ( ) : void
return void
        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();
        }