package com.xiaoleilu.hutool.cache.impl; import java.util.Iterator; import java.util.NoSuchElementException; /** * {@link com.xiaoleilu.hutool.cache.impl.AbstractCache} 的值迭代器. */ public class CacheValuesIterator<V> implements Iterator<V> { private Iterator<? extends CacheObj<?, V>> iterator; private CacheObj<?,V> nextValue; CacheValuesIterator(AbstractCache<?,V> abstractCacheMap) { iterator = abstractCacheMap.cacheMap.values().iterator(); nextValue(); } /** * 下一个值,当不存在则下一个值为null */ private void nextValue() { while (iterator.hasNext()) { nextValue = iterator.next(); if (nextValue.isExpired() == false) { return; } } nextValue = null; } /** * @return 是否有下一个值 */ @Override public boolean hasNext() { return nextValue != null; } /** * @return 下一个值 */ @Override public V next() { if (false == hasNext()) { throw new NoSuchElementException(); } final V cachedObject = nextValue.obj; nextValue(); return cachedObject; } /** * 从缓存中移除没有过期的当前值 */ @Override public void remove() { iterator.remove(); } }