package de.invesdwin.util.math.decimal.stream;
import javax.annotation.concurrent.NotThreadSafe;
import de.invesdwin.util.collections.iterable.ASkippingIterator;
import de.invesdwin.util.collections.iterable.ICloseableIterator;
import de.invesdwin.util.math.decimal.ADecimal;
@NotThreadSafe
public class DecimalStreamRemoveFlatSequences<E extends ADecimal<E>> implements IDecimalStreamAlgorithm<E, E> {
private E prevValue = null;
@Override
public E process(final E value) {
final E returnedValue;
if (prevValue == null || !value.equals(prevValue)) {
returnedValue = value;
} else {
returnedValue = null;
}
prevValue = value;
return returnedValue;
}
public ICloseableIterator<E> asIterator(final ICloseableIterator<? extends E> input) {
return new ASkippingIterator<E>(input) {
@Override
protected boolean skip(final E element) {
return process(element) == null;
}
};
}
}