The Iterator
interface isn't that big, so you could just write your own delegating iterator:
class FacadeIterator implements Iterator<FacadeItem> {
private final Iterator<Item> delegate; // set in ctor
@Override
public FacadeItem next() {
return new FacadeItem(delegate.next());
}
// the other two methods just delegate straight
}
and then
Iterator<FacadeItem> facadeIterator = new FacadeIterator(itemIterator);
If you're using Guava, you can use their Iterators.transform
static method to make one of these for you:
Iterator<FacadeItem> facadeIterator = Iterators.transform(itemIterator,
/* anon class of Function<Item, FacadeItem> */);
And in Java 1.8, this option becomes really easy:
Iterator<FacadeItem> facadeIterator
= Iterators.transform(itemIterator, FacadeItem::new)