class MySequence implements Iterable { // ... some reference to data public Iterator iterator() { return new Iterator() { // Correct: iteration state inside returned iterator final Iterator it = data.iterator(); public boolean hasNext() { return it.hasNext(); } public MyElem next() { return transformElem(it.next()); } public void remove() { // ... } }; } }