diff --git a/src/main/java/org/warp/commonutils/functional/MappedIterator.java b/src/main/java/org/warp/commonutils/functional/MappedIterator.java new file mode 100644 index 0000000..e1ca028 --- /dev/null +++ b/src/main/java/org/warp/commonutils/functional/MappedIterator.java @@ -0,0 +1,43 @@ +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)); + }); + } +}