package de.axone.data; import java.util.Iterator; import java.util.List; public abstract class IterableWrapper<SRC,DST> implements Iterable<DST> { private final Iterable<SRC> items; protected IterableWrapper( List<SRC> items, int start, int count ){ int end = start+count; if( end > items.size() ) end = items.size(); this.items = items.subList( start, end ); } protected IterableWrapper( Iterable<SRC> items ){ this.items = items; } protected abstract DST wrap( SRC source ); @Override public Iterator<DST> iterator() { return new MyIterator( items.iterator() ); } private class MyIterator implements Iterator<DST> { private final Iterator<SRC> it; MyIterator( Iterator<SRC> it ){ this.it = it; } @Override public boolean hasNext() { return it.hasNext(); } @Override public DST next() { return wrap( it.next() ); } @Override public void remove() { it.remove(); } } }