// NOTE: This means that the currentIterator
// reference could potentially advance several iterators before
// finding one where the hasNext method
// returns true, but the recursion will take care of that.
public boolean hasNext() {
if(!currentIterator.hasNext()) {
if (!listIterator.hasNext()) {
return false;
}
currentIterator = listIterator.next();
hasNext();
}
return true;
}
assertTrue(signleIterator.hasNext() );
final Iterator<Integer> a = Arrays.asList(1, 2, 3, 4, 5).iterator();
final Iterator<Integer> b = Arrays.asList(6).iterator();
final Iterator<Integer> c = new ArrayList<Integer>().iterator();
final Iterator<Integer> d = new ArrayList<Integer>().iterator();
final Iterator<Integer> e = Arrays.asList(7, 8, 9).iterator();
assertTrue(signleIterator.hasNext() );
for (Integer i = 1; i < =9 ; i++)
assertEquals( i, singleIterator.next() );
assertFalse( singleIterator.hasNext() );
public interface Iterator{ boolean hasNext(); E next(); void remove(); } //public static Iterator singleIterator( final //List > iteratorList) //{ //} // Main function listIterator operates as a single iterator // Implement Iterator interface public static class ListIterator implements Iterator { // boolean hasNext(); // E next(); // void remove(); // Field private final Iterator > listIterator; private Iterator currentIterator; // Constructor: make list iterator into Iterator > public ListIterator( List > iterators) { this.listIterator = iterators.iterator(); this.currentIterator = listIterator.next(); } // NOTE: This means that the currentIterator // reference could potentially advance several iterators before // finding one where the hasNext method // returns true, but the recursion will take care of that. @Override public boolean hasNext() { // CurrentIterator has no next if ( !currentIterator.hasNext() ) { // set up next iterator as currentIterator if ( !listIterator.hasNext() ) return false; currentIterator = listITerator.next(); // NOTE: recurse to check if next still has no next hasNext(); } return true; } //public next() public T next() { hasNext(); return currentIterator.next(); } // public boolean remove() public void remove() { hasNext(); currentIterator.remove(); } }
@Test public void multipleIteratorsTest() { final Iteratora = Arrays.asList(1,2,3,4,5).iterator(); final Iterator b= Arrays.asList(6).iterator(); final Iterator c = new ArrayList ().iterator(); final Iterator d = new ArrayList ().iterator(); final Iterator e = Arrays.asList(7,8,9).iterator(); final Iterator singleIterator = Iterators.singleIterator( Arrays.asList(a,b,c,d,e)); assertTrue(signleIterator.hasNext() ); for (Integer i = 1; i < =9 ; i++) assertEquals( i, singleIterator.next() ); assertFalse( singleIterator.hasNext() ); }
No comments:
Post a Comment