package de.invesdwin.util.collections.iterable;
import javax.annotation.concurrent.NotThreadSafe;
import de.invesdwin.util.error.FastNoSuchElementException;
@NotThreadSafe
public abstract class ATransformingCloseableIterator<S, R> implements ICloseableIterator<R> {
private final ICloseableIterator<? extends S> delegate;
public ATransformingCloseableIterator(final ICloseableIterator<? extends S> delegate) {
this.delegate = delegate;
}
@Override
public boolean hasNext() {
return delegate.hasNext();
}
@Override
public R next() {
final S next = delegate.next();
if (next == null) {
throw new FastNoSuchElementException("ATransformingCloseableIterator: next is null");
} else {
return transform(next);
}
}
protected abstract R transform(S value);
@Override
public void close() {
delegate.close();
}
}