package de.invesdwin.util.collections.iterable;
import java.util.Iterator;
import javax.annotation.concurrent.NotThreadSafe;
@NotThreadSafe
public class FlatteningIterable<E> implements ICloseableIterable<E> {
private final ICloseableIterable<? extends Iterable<? extends E>> delegate;
public FlatteningIterable(final ICloseableIterable<? extends Iterable<? extends E>> delegate) {
this.delegate = delegate;
}
@Override
public ICloseableIterator<E> iterator() {
final ATransformingCloseableIterator<Iterable<? extends E>, Iterator<? extends E>> transformingDelegate = new ATransformingCloseableIterator<Iterable<? extends E>, Iterator<? extends E>>(
delegate.iterator()) {
@Override
protected Iterator<? extends E> transform(final Iterable<? extends E> value) {
return value.iterator();
}
};
return new FlatteningIterator<E>(transformingDelegate);
}
}