static > ItIt nestedIterator(final Collection c, final F1 makeInnerIterator) { ret nestedIterator(iterator(c), makeInnerIterator); } static > ItIt nestedIterator(final Iterator it1, final F1 makeInnerIterator) { if (it1 == null || !it1.hasNext()) ret emptyIterableIterator(); ret iff(new F0 { A a; Iterator innerIterator; { nextOuter(); } void nextOuter { a = it1.next(); innerIterator = callF(makeInnerIterator, a); } O get() { while true { ping(); if (innerIterator.hasNext()) ret innerIterator.next(); if (!it1.hasNext()) ret endMarker(); nextOuter(); } } }); }