public class LOLIterator {
private static class ListOfListIterator implements Iterator {
private final List> list;
int r = 0;
int c = 0;
public ListOfListIterator(List> list) {
this.list = list;
}
@Override
public boolean hasNext() {
boolean result = false;
int cr = r, cc = c;
if (r Iterator listIterator(List> list) {
return new ListOfListIterator(list);
}
}
Here is the test
public class TestLOLIterator {
@Test
public void test1() {
List> l = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5, 6),
Arrays.asList(7, 8)
);
Iterator iter = LOLIterator.listIterator(l);
assertTrue(iter.hasNext());
assertEquals(iter.next().intValue(), 1);
assertEquals(iter.next().intValue(), 2);
assertEquals(iter.next().intValue(), 3);
assertTrue(iter.hasNext());
assertTrue(iter.hasNext());
assertEquals(iter.next().intValue(), 4);
assertEquals(iter.next().intValue(), 5);
assertEquals(iter.next().intValue(), 6);
assertEquals(iter.next().intValue(), 7);
assertEquals(iter.next().intValue(), 8);
assertFalse(iter.hasNext());
}
@Test
public void test2() {
List> l = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(),
Arrays.asList(4, 5, 6),
Arrays.asList(7, 8)
);
Iterator iter = LOLIterator.listIterator(l);
assertTrue(iter.hasNext());
assertEquals(iter.next().intValue(), 1);
assertEquals(iter.next().intValue(), 2);
assertEquals(iter.next().intValue(), 3);
assertTrue(iter.hasNext());
assertTrue(iter.hasNext());
assertEquals(iter.next().intValue(), 4);
assertEquals(iter.next().intValue(), 5);
assertEquals(iter.next().intValue(), 6);
assertEquals(iter.next().intValue(), 7);
assertEquals(iter.next().intValue(), 8);
assertFalse(iter.hasNext());
}
}