コード例 #1
0
        protected override IStream <AggregationResult <TIn, TMultiKey, TAggrRes> > CreateOutputStream(AggregateMultiKeyArgs <TIn, TAggrRes, TMultiKey> args)
        {
            var keyProcessor  = GroupProcessor.Create(args.GetKeys);
            var observableOut = args.InputStream.Observable.Do(keyProcessor.ProcessRow).Last().MultiMap <TIn, AggregationResult <TIn, TMultiKey, TAggrRes> >((i, pushValue) =>
            {
                foreach (var group in keyProcessor.GetGroups())
                {
                    TIn first        = default;
                    TAggrRes aggrRes = default;
                    foreach (var item in group.Value)
                    {
                        if (first != null)
                        {
                            first   = item;
                            aggrRes = args.CreateEmptyAggregation(first);
                        }
                        aggrRes = args.Aggregate(aggrRes, item);
                    }
                    pushValue(new AggregationResult <TIn, TMultiKey, TAggrRes>
                    {
                        Aggregation = aggrRes,
                        FirstValue  = first,
                        Key         = group.Key
                    });
                }
            });

            return(CreateUnsortedStream(observableOut));
        }
コード例 #2
0
ファイル: ReKeyStreamNode.cs プロジェクト: paillave/Etl.Net
        protected override IStream <TOut> CreateOutputStream(ReKeyArgs <TIn, TOut, TMultiKey> args)
        {
            var keyProcessor  = GroupProcessor.Create(args.GetKeys);
            var observableOut = args.InputStream.Observable.Do(keyProcessor.ProcessRow).Last().MultiMap <TIn, TOut>((i, pushValue) =>
            {
                var groups = keyProcessor.GetGroups();
                foreach (var elt in groups.SelectMany(g => g.Value.Select(v => new { Row = v, g.Key })))
                {
                    pushValue(args.ResultSelector(elt.Row, elt.Key));
                }
            });

            return(CreateUnsortedStream(observableOut));
        }