ArrayList Spliterator
package name.panitz.util;
import java.util.Spliterator;
import java.util.function.Consumer;
public class ALSpliterator<A> implements Spliterator<A> {
int start;
int end;
A[] as;
public ALSpliterator(int start, int end, A[] as) {
super();
this.start = start;
this.end = end;
this.as = as;
}
@Override
public boolean tryAdvance(Consumer<? super A> action) {
if (start >= end)
return false;
action.accept(as[start++]);
return true;
}
@Override
public Spliterator<A> trySplit() {
int middle = start + (end - start) / 2;
int oldEnd = end;
end = middle;
return new ALSpliterator<>(middle, oldEnd, as);
}
@Override
public long estimateSize() {
return end - start;
}
@Override
public int characteristics() {
return 0;
}
}