public Zipping3Spliterator(Spliterator<T1> left, Spliterator<T2> middle,Spliterator<T3> right, Function3<? super T1, ? super T2, ? super T3, ? extends R> fn) { this.left = CopyableSpliterator.copy(left); this.middle = CopyableSpliterator.copy(middle); this.right = CopyableSpliterator.copy(right); this.fn = fn; } public <R2> Zipping3Spliterator<T1,T2,T3,R2> compose(Function<? super R,? extends R2> fn){
public static <T> Spliterator<T> copy(Spliterator<T> split){ if(split instanceof CopyableSpliterator){ return ((CopyableSpliterator<T>)split).copy(); } return split; } public static <T> Spliterator[] copy(Spliterator[] spliterators){
@Override public Spliterator<R> copy() { return new PublisherFlatMappingSpliterator<>(CopyableSpliterator.copy(source),mapper); } }
@Override public Spliterator<T> copy() { return new CompleteSpliterator<>(CopyableSpliterator.copy(source), fn); } }
@Override public Spliterator<R> copy() { return new IterableFlatMappingSpliterator<>(CopyableSpliterator.copy(source),mapper); } }
@Override public Spliterator<T> copy() { return new LimitLastSpliterator<T>(CopyableSpliterator.copy(source),limit); } }
@Override public Spliterator<T> copy() { return new LimitSpliterator<>(CopyableSpliterator.copy(source),take); } }
@Override public Spliterator<T> copy() { return new LimitWhileClosedSpliterator<>(CopyableSpliterator.copy(source),predicate); } }
@Override public Spliterator<T> copy() { return new LimitWhileSpliterator<>(CopyableSpliterator.copy(source),predicate); } }
@Override <R2> DistinctSpliterator<IN, ?> create(Function<? super IN, ? extends R2> after) { return new DistinctSpliterator(after, CopyableSpliterator.copy(source)); } }
@Override public Spliterator<T> copy() { return new SkipSpliterator<T>(CopyableSpliterator.copy(source),skip); } }
@Override public Spliterator<T> copy() { return new SkipWhileSpliterator<>(CopyableSpliterator.copy(source),predicate); } }
@Override public Spliterator<U> copy() { return new ScanLeftSpliterator<T, U>(CopyableSpliterator.copy(source),identity,function); } }
@Override public Spliterator<T> copy() { return new OnEmptySpliterator<T>(CopyableSpliterator.copy(source),value); } }
@Override public Spliterator<T> copy() { return new OnEmptyGetSpliterator<T>(CopyableSpliterator.copy(source),value); } }
public static <T2,T,R> IterableFlatMappingSpliterator<T2,R> compose(FunctionSpliterator<T2,T> fnS,Function<? super T, ? extends Iterable<? extends R>> mapper){ Function<? super T2,? extends T> fn = fnS.function(); return new IterableFlatMappingSpliterator<T2,R>(CopyableSpliterator.copy(fnS.source()),mapper.<T2>compose(fn)); } @Override
public static <T2,T,R> PublisherFlatMappingSpliterator<T2,R> compose(FunctionSpliterator<T2,T> fnS,Function<? super T, ? extends Publisher<? extends R>> mapper){ Function<? super T2,? extends T> fn = fnS.function(); return new PublisherFlatMappingSpliterator<T2,R>(CopyableSpliterator.copy(fnS.source()),mapper.<T2>compose(fn)); } @Override