Subato

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