package org.neo4j.helpers.collection; import java.util.Iterator; /** * Wraps an {@link Iterable} so that it returns items of another type. The * iteration is done lazily. * * @param <T> the type of items to return * @param <U> the type of items to wrap/convert from */ public abstract class IterableWrapper<T, U> implements Iterable<T> { private Iterable<U> source; public IterableWrapper( Iterable<U> iterableToWrap ) { this.source = iterableToWrap; } protected abstract T underlyingObjectToObject( U object ); public Iterator<T> iterator() { return new MyIteratorWrapper( source.iterator() ); } private class MyIteratorWrapper extends IteratorWrapper<T, U> { public MyIteratorWrapper( Iterator<U> iteratorToWrap ) { super( iteratorToWrap ); } @Override protected T underlyingObjectToObject( U object ) { return IterableWrapper.this.underlyingObjectToObject( object ); } } }