class CheckedIterator {

    @NonNull
    public CheckedIterator<E, T> skip(final int skipSize) throws IllegalArgumentException {
        checkArgument(skipSize >= 0, "skipSize is negative");
        final CheckedIterator<E, T> iterator = this;
        return new ACheckedIterator<E, T>() {
            private boolean first = true;

            @Override
            protected E computeNext() throws T {
                if (first) {
                    iterator.advance(skipSize);
                    first = false;
                }
                return iterator.hasNext() ? iterator.next() : endOfData();
            }
        };
    }

}