@Override public Iterator<T> iterator() { List<Iterator<T>> iterators = new ArrayList<>(); for (Iterable<T> baseIterable : baseIterables) { iterators.add(baseIterable.iterator()); } return new MergeIterator<>(comparator, iterators); } }
@Override public T next() { if (!hasNext()) { throw new NoSuchElementException(); } PeekingIterator<T> retIt = pQueue.remove(); T retVal = retIt.next(); if (retIt.hasNext()) { pQueue.add(retIt); } return retVal; }
@Test public void testSanity() { MergeIterator<Integer> iter = new MergeIterator<>( Ordering.natural(), Lists.newArrayList( Arrays.asList(1, 3, 5, 7, 9).iterator(), Arrays.asList(2, 8).iterator(), Arrays.asList(4, 6, 8).iterator() ) ); Assert.assertEquals(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 8, 9), Lists.newArrayList(iter)); }
@Override public T next() { if (!hasNext()) { throw new NoSuchElementException(); } PeekingIterator<T> retIt = pQueue.remove(); T retVal = retIt.next(); if (retIt.hasNext()) { pQueue.add(retIt); } return retVal; }
@Test public void testScrewsUpOnOutOfOrder() { MergeIterator<Integer> iter = new MergeIterator<>( Ordering.natural(), Lists.newArrayList( Arrays.asList(1, 3, 5, 4, 7, 9).iterator(), Arrays.asList(2, 8).iterator(), Arrays.asList(4, 6).iterator() ) ); Assert.assertEquals(Arrays.asList(1, 2, 3, 4, 5, 4, 6, 7, 8, 9), Lists.newArrayList(iter)); } }
@Override public Iterator<T> iterator() { List<Iterator<T>> iterators = Lists.newArrayList(); for (Iterable<T> baseIterable : baseIterables) { iterators.add(baseIterable.iterator()); } return new MergeIterator<>(comparator, iterators); } }