common-utils/src/main/java/org/warp/commonutils/functional/MappedIterator.java

44 lines
1.0 KiB
Java

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<A, B> implements Iterator<B> {
private final Iterator<A> iterator;
private final Function<A,B> mappingFunction;
private MappedIterator(Iterator<A> iterator, Function<A, B> mappingFunction) {
this.iterator = iterator;
this.mappingFunction = mappingFunction;
}
public static <T, U> Iterator<U> of(Iterator<T> 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<? super B> action) {
iterator.forEachRemaining((item) -> {
action.accept(mappingFunction.apply(item));
});
}
}