package de.invesdwin.util.collections.iterable; import javax.annotation.concurrent.Immutable; @Immutable public abstract class ATransformingCloseableIterable<S, R> implements ICloseableIterable<R> { private final ICloseableIterable<? extends S> delegate; public ATransformingCloseableIterable(final ICloseableIterable<? extends S> delegate) { if (delegate == null) { throw new NullPointerException("delegate must not be null"); } this.delegate = delegate; } protected abstract R transform(S value); @Override public ICloseableIterator<R> iterator() { return new ATransformingCloseableIterator<S, R>(delegate.iterator()) { @Override protected R transform(final S value) { return ATransformingCloseableIterable.this.transform(value); } }; } }