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){
@Override public void forEachRemaining(Consumer<? super R> action) { if(hasCharacteristics(SIZED)) { if(left.getExactSizeIfKnown() < right.getExactSizeIfKnown()){ left.forEachRemaining(l -> { right.tryAdvance(r -> { action.accept(fn.apply(l, r)); }); }); }else { right.forEachRemaining(r -> { left.tryAdvance(l -> { action.accept(fn.apply(l, r)); }); }); } }else{ CopyableSpliterator.super.forEachRemaining(action); return; } }
public ZippingSpliterator(Spliterator<T1> left, Spliterator<T2> right, BiFunction<? super T1, ? super T2, ? extends R> fn) { this.left = CopyableSpliterator.copy(left); this.right = CopyableSpliterator.copy(right); this.fn = fn; } public <R2> ZippingSpliterator<T1,T2,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){
public static <T> Spliterator[] copy(Spliterator[] spliterators){ Spliterator[] copies = new Spliterator[spliterators.length]; int i = 0; for(Spliterator next : spliterators){ copies[i++] = copy(next); } return copies; } }
Spliterator<T> copy() { return CopyableSpliterator.copy(stream); }
@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)); } }