示例#1
0
            internal override Node <T> opEvaluateParallel <P_IN>(PipelineHelper <T> helper, Spliterator <P_IN> spliterator, IntFunction <T[]> generator)
            {
                if (StreamOpFlag.DISTINCT.isKnown(helper.StreamAndOpFlags))
                {
                    // No-op
                    return(helper.Evaluate(spliterator, false, generator));
                }
                else if (StreamOpFlag.ORDERED.isKnown(helper.StreamAndOpFlags))
                {
                    return(reduce(helper, spliterator));
                }
                else
                {
                    // Holder of null state since ConcurrentHashMap does not support null values
                    AtomicBoolean seenNull = new AtomicBoolean(false);
                    ConcurrentDictionary <T, Boolean> map = new ConcurrentDictionary <T, Boolean>();
//JAVA TO C# CONVERTER TODO TASK: Java lambdas satisfy functional interfaces, while .NET lambdas satisfy delegates - change the appropriate interface to a delegate:
                    TerminalOp <T, Void> forEachOp = ForEachOps.makeRef(Stream_Fields.t =>
                    {
                        if (Stream_Fields.t == null)
                        {
                            seenNull.Set(Stream_Fields.True);
                        }
                        else
                        {
                            map.GetOrAdd(Stream_Fields.t, true);
                        }
                    }, false);
示例#2
0
            internal virtual Node <T> reduce <P_IN>(PipelineHelper <T> helper, Spliterator <P_IN> spliterator)
            {
                // If the stream is SORTED then it should also be ORDERED so the following will also
                // preserve the sort order
                TerminalOp <T, LinkedHashSet <T> > reduceOp = ReduceOps.MakeRef <T, LinkedHashSet <T> >(LinkedHashSet::new, LinkedHashSet::add, LinkedHashSet::addAll);

                return(Nodes.Node(reduceOp.evaluateParallel(helper, spliterator)));
            }