From 5317a2ff2669c2bbbdbb6be77c7af6f0a7dc090d Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Tue, 25 Aug 2020 23:37:13 +0200 Subject: [PATCH] Update MappedIterator.java --- .../functional/MappedIterator.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/main/java/org/warp/commonutils/functional/MappedIterator.java 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)); + }); + } +}