44 lines
1.0 KiB
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));
|
|
});
|
|
}
|
|
}
|