package net.techreadiness.util.observables; import java.io.Serializable; import java.util.Iterator; /** * * An Iterator wrapper which allows observation of added and removed elements via an ElementObserver * @param <T> Type of object being iterated over * */ public class ObservableIterator<T> implements Iterator<T>, Serializable { private static final long serialVersionUID = 1L; private final Iterator<T> delegate; private final ElementObserver<T> observer; private T curr; public ObservableIterator(Iterator<T> delegate, ElementObserver<T> observer) { this.delegate = delegate; this.observer = observer; } @Override public boolean hasNext() { return delegate.hasNext(); } @Override public T next() { this.curr = delegate.next(); return curr; } @Override public void remove() { observer.elementRemoved(curr); delegate.remove(); } }