package com.constellio.data.utils; import java.util.Iterator; import com.constellio.data.utils.LazyIteratorRuntimeException.LazyIteratorRuntimeException_IncorrectUsage; import com.constellio.data.utils.LazyIteratorRuntimeException.LazyIteratorRuntimeException_RemoveNotAvailable; public abstract class LazyIterator<T> implements Iterator<T> { boolean consumed = true; T next; @Override public final boolean hasNext() { if (consumed) { next = getNextOrNull(); consumed = false; } return next != null; } @Override public final T next() { if (consumed) { next = getNextOrNull(); consumed = false; } if (next == null) { throw new LazyIteratorRuntimeException_IncorrectUsage(); } consumed = true; return next; } @Override public final void remove() { throw new LazyIteratorRuntimeException_RemoveNotAvailable(); } protected abstract T getNextOrNull(); }