@Override public T next() { if (!hasNext()) { throw new NoSuchElementException(); } final PeekingIterator<T> littleIt; if (!iterOfIterators.hasNext()) { littleIt = firstElementComparedPQueue.remove(); } else if (firstElementComparedPQueue.isEmpty()) { littleIt = iterOfIterators.next(); } else { T pQueueValue = firstElementComparedPQueue.peek().peek(); T iterItersValue = iterOfIterators.peek().peek(); if (comparator.compare(pQueueValue, iterItersValue) <= 0) { littleIt = firstElementComparedPQueue.remove(); } else { littleIt = iterOfIterators.next(); } } T retVal = littleIt.next(); if (littleIt.hasNext()) { firstElementComparedPQueue.add(littleIt); } return retVal; }
@Test(expected = UnsupportedOperationException.class) public void testRemove() { OrderedMergeIterator<Integer> iter = new OrderedMergeIterator<>( Ordering.natural(), Collections.emptyIterator() ); iter.remove(); } }
@Test(expected = NoSuchElementException.class) public void testNoElementInNext() { OrderedMergeIterator<Integer> iter = new OrderedMergeIterator<>( Ordering.natural(), Collections.emptyIterator() ); iter.next(); }
@Test public void testSanity() { final ArrayList<Iterator<Integer>> iterators = new ArrayList<>(); iterators.add(Arrays.asList(1, 3, 5, 7, 9).iterator()); iterators.add(Arrays.asList(2, 8).iterator()); iterators.add(Arrays.asList(4, 6, 8).iterator()); OrderedMergeIterator<Integer> iter = new OrderedMergeIterator<Integer>( Ordering.natural(), iterators.iterator() ); Assert.assertEquals(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 8, 9), Lists.newArrayList(iter)); }
@Test public void testScrewsUpOnOutOfOrderBeginningOfList() { final ArrayList<Iterator<Integer>> iterators = new ArrayList<>(); iterators.add(Arrays.asList(1, 3, 5, 7, 9).iterator()); iterators.add(Arrays.asList(4, 6).iterator()); iterators.add(Arrays.asList(2, 8).iterator()); OrderedMergeIterator<Integer> iter = new OrderedMergeIterator<Integer>( Ordering.natural(), iterators.iterator() ); Assert.assertEquals(Arrays.asList(1, 3, 4, 2, 5, 6, 7, 8, 9), Lists.newArrayList(iter)); }
@Override public T next() { if (!hasNext()) { throw new NoSuchElementException(); } final PeekingIterator<T> littleIt; if (!iterOfIterators.hasNext()) { littleIt = firstElementComparedPQueue.remove(); } else if (firstElementComparedPQueue.isEmpty()) { littleIt = iterOfIterators.next(); } else { T pQueueValue = firstElementComparedPQueue.peek().peek(); T iterItersValue = iterOfIterators.peek().peek(); if (comparator.compare(pQueueValue, iterItersValue) <= 0) { littleIt = firstElementComparedPQueue.remove(); } else { littleIt = iterOfIterators.next(); } } T retVal = littleIt.next(); if (littleIt.hasNext()) { firstElementComparedPQueue.add(littleIt); } return retVal; }
@Test public void testScrewsUpOnOutOfOrderInList() { final ArrayList<Iterator<Integer>> iterators = new ArrayList<>(); iterators.add(Arrays.asList(1, 3, 5, 4, 7, 9).iterator()); iterators.add(Arrays.asList(2, 8).iterator()); iterators.add(Arrays.asList(4, 6).iterator()); OrderedMergeIterator<Integer> iter = new OrderedMergeIterator<Integer>( Ordering.natural(), iterators.iterator() ); Assert.assertEquals(Arrays.asList(1, 2, 3, 4, 5, 4, 6, 7, 8, 9), Lists.newArrayList(iter)); }
OrderedMergeIterator<Integer> iter = new OrderedMergeIterator<Integer>( Ordering.natural(), iterators.iterator()