package dk.itu.oop.lecture5; public abstract class FilterIterator2 implements OOPIterator { private OOPIterator inIterator; private Object nextElement; protected abstract boolean condition(Object obj); public FilterIterator2(OOPIterator in){ inIterator = in; } protected void findNext(){ while (inIterator.hasNext() ){ nextElement = inIterator.next(); if ( condition(nextElement) ) return; } nextElement = null; } public boolean hasNext(){ return nextElement != null; } public Object next(){ Object returnMe = nextElement; findNext(); return returnMe; } public Object peek(){ return nextElement; } public OOPIterator cloneMe(){ try{ FilterIterator2 clone = (FilterIterator2)super.clone(); clone.inIterator = inIterator.cloneMe(); return clone; }catch(CloneNotSupportedException shouldNotHappen){ throw new Error("Object claims not to be able to clone"); } } }