Iterator<E> () { return new Iterator<E>() { private FList<E> list = FList.this; @Override public boolean hasNext() { return list.size() > 0; } @Override public E next() { if (list.size() == 0) throw new NoSuchElementException(); E res = list.myHead; list = list.getTail(); assert list != null; return res; } @Override public void remove() { throw new UnsupportedOperationException(); } }; }