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