public Iterator<IntPair> iterator() { final Iterator<IntPair> parentIter = parent.iterator(); return new Iterator<IntPair>() { public boolean hasNext() { return parentIter.hasNext(); } public IntPair next() { IntPair parentPair = parentIter.next(); return new IntPair(parentPair.target, parentPair.source); } public void remove() { parentIter.remove(); } }; }