package com.revolsys.collection; import java.lang.ref.Reference; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; import com.revolsys.collection.iterator.AbstractIterator; public class ReferenceIterator<V> extends AbstractIterator<V> { private Iterator<Reference<V>> iterator; public ReferenceIterator(final Collection<Reference<V>> collection) { this.iterator = collection.iterator(); } @Override protected void closeDo() { super.closeDo(); this.iterator = null; } @Override protected V getNext() throws NoSuchElementException { while (this.iterator.hasNext()) { final Reference<V> reference = this.iterator.next(); final V value = reference.get(); if (value != null) { return value; } } throw new NoSuchElementException(); } }