package org.warp.commonutils.functional; import java.util.Iterator; import java.util.function.Consumer; import java.util.function.Function; import org.jetbrains.annotations.Nullable; public class MappedIterator implements Iterator { private final Iterator iterator; private final Function mappingFunction; private MappedIterator(Iterator iterator, Function mappingFunction) { this.iterator = iterator; this.mappingFunction = mappingFunction; } public static Iterator of(Iterator originalIterator, Function<@Nullable T, @Nullable U> mappingFunction) { return new MappedIterator<>(originalIterator, mappingFunction); } @Override public boolean hasNext() { return iterator.hasNext(); } @Override public B next() { return mappingFunction.apply(iterator.next()); } @Override public void remove() { iterator.remove(); } @Override public void forEachRemaining(Consumer action) { iterator.forEachRemaining((item) -> { action.accept(mappingFunction.apply(item)); }); } }