/** * Gets a list iterator that filters another list iterator. * <p> * The returned iterator will only return objects that match the specified * filtering predicate. * * @param listIterator the list iterator to use, not null * @param predicate the predicate to use as a filter, not null * @return a new filtered iterator * @throws NullPointerException if either parameter is null */ public static ListIterator filteredListIterator(ListIterator listIterator, Predicate predicate) { if (listIterator == null) { throw new NullPointerException("ListIterator must not be null"); } if (predicate == null) { throw new NullPointerException("Predicate must not be null"); } return new FilterListIterator(listIterator, predicate); }
private boolean setPreviousObject() { // if nextObjectSet, // then we've walked back one step in the // underlying list (due to a hasNext() call) // so skip ahead one matching object if(nextObjectSet) { clearNextObject(); if(!setPreviousObject()) { return false; } else { clearPreviousObject(); } } while(iterator.hasPrevious()) { Object object = iterator.previous(); if(predicate.evaluate(object)) { previousObject = object; previousObjectSet = true; return true; } } return false; }
private boolean setNextObject() { // if previousObjectSet, // then we've walked back one step in the // underlying list (due to a hasPrevious() call) // so skip ahead one matching object if(previousObjectSet) { clearPreviousObject(); if(!setNextObject()) { return false; } else { clearNextObject(); } } while(iterator.hasNext()) { Object object = iterator.next(); if(predicate.evaluate(object)) { nextObject = object; nextObjectSet = true; return true; } } return false; }
public Object next() { if(!nextObjectSet) { if(!setNextObject()) { throw new NoSuchElementException(); } } nextIndex++; Object temp = nextObject; clearNextObject(); return temp; }
public Object previous() { if(!previousObjectSet) { if(!setPreviousObject()) { throw new NoSuchElementException(); } } nextIndex--; Object temp = previousObject; clearPreviousObject(); return temp; }
public void testFailingHasNextBug() { FilterListIterator filtered = new FilterListIterator(list.listIterator(),fourPred); ListIterator expected = fours.listIterator(); while(expected.hasNext()) { expected.next(); filtered.next(); } assertTrue(filtered.hasPrevious()); assertTrue(!filtered.hasNext()); assertEquals(expected.previous(),filtered.previous()); }
public boolean hasNext() { if(nextObjectSet) { return true; } else { return setNextObject(); } }
public boolean hasPrevious() { if(previousObjectSet) { return true; } else { return setPreviousObject(); } }
public Object next() { if(!nextObjectSet) { if(!setNextObject()) { throw new NoSuchElementException(); } } nextIndex++; Object temp = nextObject; clearNextObject(); return temp; }
public Object previous() { if(!previousObjectSet) { if(!setPreviousObject()) { throw new NoSuchElementException(); } } nextIndex--; Object temp = previousObject; clearPreviousObject(); return temp; }
FilterListIterator filtered = new FilterListIterator(list.listIterator(),threePred); assertEquals(new Integer(0),filtered.next()); assertEquals(new Integer(3),filtered.next()); assertEquals(new Integer(6),filtered.next()); assertEquals(new Integer(9),filtered.next()); assertEquals(new Integer(12),filtered.next()); assertEquals(new Integer(15),filtered.next()); assertEquals(new Integer(18),filtered.next()); assertEquals(new Integer(18),filtered.previous()); assertEquals(new Integer(15),filtered.previous()); assertEquals(new Integer(12),filtered.previous()); assertEquals(new Integer(9),filtered.previous()); assertEquals(new Integer(6),filtered.previous()); assertEquals(new Integer(3),filtered.previous()); assertEquals(new Integer(0),filtered.previous()); assertTrue(!filtered.hasPrevious()); assertEquals(new Integer(0),filtered.next()); assertEquals(new Integer(3),filtered.next()); assertEquals(new Integer(6),filtered.next()); assertEquals(new Integer(9),filtered.next()); assertEquals(new Integer(12),filtered.next()); assertEquals(new Integer(15),filtered.next()); assertEquals(new Integer(18),filtered.next()); assertTrue(!filtered.hasNext());
public boolean hasNext() { if(nextObjectSet) { return true; } else { return setNextObject(); } }
public boolean hasPrevious() { if(previousObjectSet) { return true; } else { return setPreviousObject(); } }
private boolean setPreviousObject() { // if nextObjectSet, // then we've walked back one step in the // underlying list (due to a hasNext() call) // so skip ahead one matching object if(nextObjectSet) { clearNextObject(); if(!setPreviousObject()) { return false; } else { clearPreviousObject(); } } while(iterator.hasPrevious()) { Object object = iterator.previous(); if(predicate.evaluate(object)) { previousObject = object; previousObjectSet = true; return true; } } return false; }
private boolean setNextObject() { // if previousObjectSet, // then we've walked back one step in the // underlying list (due to a hasPrevious() call) // so skip ahead one matching object if(previousObjectSet) { clearPreviousObject(); if(!setNextObject()) { return false; } else { clearNextObject(); } } while(iterator.hasNext()) { Object object = iterator.next(); if(predicate.evaluate(object)) { nextObject = object; nextObjectSet = true; return true; } } return false; }
/** * Gets a list iterator that filters another list iterator. * <p> * The returned iterator will only return objects that match the specified * filtering predicate. * * @param listIterator the list iterator to use, not null * @param predicate the predicate to use as a filter, not null * @return a new filtered iterator * @throws NullPointerException if either parameter is null */ public static ListIterator filteredListIterator(ListIterator listIterator, Predicate predicate) { if (listIterator == null) { throw new NullPointerException("ListIterator must not be null"); } if (predicate == null) { throw new NullPointerException("Predicate must not be null"); } return new FilterListIterator(listIterator, predicate); }
public Object next() { if(!nextObjectSet) { if(!setNextObject()) { throw new NoSuchElementException(); } } nextIndex++; Object temp = nextObject; clearNextObject(); return temp; }
public Object previous() { if(!previousObjectSet) { if(!setPreviousObject()) { throw new NoSuchElementException(); } } nextIndex--; Object temp = previousObject; clearPreviousObject(); return temp; }
public boolean hasNext() { if(nextObjectSet) { return true; } else { return setNextObject(); } }
public boolean hasPrevious() { if(previousObjectSet) { return true; } else { return setPreviousObject(); } }