@Test public void fourLevels2() { list1 = new ArrayList<Integer>(100); for (int i = 0; i < 100; i++) { list1.add(i + 1); } list2 = list1; it = new MultiIterator(Arrays.asList(list1, list2)); while (it.hasNext()) { it.next(); } }
@Override public boolean hasNext() { while (hasNext == null) { produceNext(); } return hasNext; }
@Test public void oneLevel() { it = new MultiIterator(Arrays.asList(list1)); assertIteratorEquals(Arrays.asList(row(1), row(2)).iterator(), it); }
@Test public void test() { List<Integer> list1 = asList(1, 2, 3, 4); List<Integer> list2 = asList(10, 20, 30); MultiIterator<Integer> iterator = new MultiIterator<Integer>(asList(list1, list2)); List<Object[]> list = IteratorAdapter.asList(iterator); assertEquals(asList(1, 10), asList(list.get(0))); assertEquals(asList(1, 20), asList(list.get(1))); assertEquals(asList(1, 30), asList(list.get(2))); assertEquals(asList(2, 10), asList(list.get(3))); assertEquals(asList(2, 20), asList(list.get(4))); assertEquals(asList(2, 30), asList(list.get(5))); assertEquals(asList(3, 10), asList(list.get(6))); assertEquals(asList(3, 20), asList(list.get(7))); assertEquals(asList(3, 30), asList(list.get(8))); assertEquals(asList(4, 10), asList(list.get(9))); assertEquals(asList(4, 20), asList(list.get(10))); assertEquals(asList(4, 30), asList(list.get(11))); }
@Test public void emptyList() { it = new MultiIterator(Arrays.asList(list1, list2)); while (it.hasNext()) { it.next(); fail("should return false on hasNext()"); } }
@Test public void threeLevels() { list1 = Arrays.asList(1, 2); list2 = Arrays.asList(10, 20, 30); list3 = Arrays.asList(100, 200, 300, 400); it = new MultiIterator(Arrays.asList(list1, list2, list3)); List<Object[]> list = new ArrayList<Object[]>(); for (Object a : row(1, 2)) { for (Object b : row(10, 20, 30)) { for (Object c : row(100, 200, 300, 400)) { list.add(row(a, b, c)); } } } assertIteratorEquals(list.iterator(), it); }
@Override @SuppressWarnings("unchecked") public T[] next() { while (hasNext == null) { produceNext(); } if (hasNext) { hasNext = null; return (T[]) values.clone(); } else { throw new NoSuchElementException(); } }
@Test public void fourLevels() { list1 = Arrays.asList(1, 2); list2 = Arrays.asList(10, 20, 30); list3 = Arrays.asList(100, 200, 300, 400); list4 = Arrays.asList(1000, 2000, 3000, 4000, 5000); it = new MultiIterator(Arrays.asList(list1, list2, list3, list4)); List<Object[]> list = new ArrayList<Object[]>(); for (Object a : row(1, 2)) { for (Object b : row(10, 20, 30)) { for (Object c : row(100, 200, 300, 400)) { for (Object d : row(1000, 2000, 3000, 4000, 5000)) { list.add(row(a, b, c, d)); } } } } assertIteratorEquals(list.iterator(), it); }
@Override public boolean hasNext() { while (hasNext == null) { produceNext(); } return hasNext; }
@Test public void twoLevels() { list2 = Arrays.asList(10, 20, 30); it = new MultiIterator(Arrays.asList(list1, list2)); Iterator<Object[]> base = Arrays.asList(row(1, 10), row(1, 20), row(1, 30), row(2, 10), row(2, 20), row(2, 30)).iterator(); assertIteratorEquals(base, it); }
@Override @SuppressWarnings("unchecked") public T[] next() { while (hasNext == null) { produceNext(); } if (hasNext) { hasNext = null; return (T[]) values.clone(); } else { throw new NoSuchElementException(); } }