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);
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))); }