package org.infinispan.stream.impl;
import java.util.function.Function;
import org.infinispan.Cache;
import org.infinispan.commons.util.CloseableIterator;
/**
* A CloseableIterator implementation that allows for a CloseableIterator that doesn't allow remove operations to
* implement remove by delegating the call to the provided cache to remove the previously read value. The key used
* to remove from the cache is determined by first applying the removeFunction to the value retrieved from the
* iterator.
*
* @author wburns
* @since 8.0
*/
public class RemovableCloseableIterator<K, C> extends RemovableIterator<K, C> implements CloseableIterator<C> {
protected final CloseableIterator<C> realIterator;
public RemovableCloseableIterator(CloseableIterator<C> realIterator, Cache<K, ?> cache,
Function<? super C, K> removeFunction) {
super(realIterator, cache, removeFunction);
this.realIterator = realIterator;
}
@Override
public void close() {
currentValue = null;
previousValue = null;
realIterator.close();
}
}