private void lazy() { if (it == null) it = create(); }
@Override public T next() { lazy(); return it.next(); }
@Override public boolean hasNext() { lazy(); return it.hasNext(); }
@Override public void remove() { lazy(); it.remove(); }
@Override public ExtendedIterator<T> filterDrop(Filter<T> f) { lazy(); return it.filterDrop(f); }
@Override public ExtendedIterator<T> filterKeep(Filter<T> f) { lazy(); return it.filterKeep(f); }
@Override public void close() { lazy(); it.close(); }
@Override public <U> ExtendedIterator<U> mapWith(Map1<T,U> map1) { lazy(); return it.mapWith(map1); }
public ExtendedIterator<T> andThen(ClosableIterator<? extends T> other) { lazy(); return it.andThen(other); }