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