1 package org.davidmoten.kool.internal.operators.stream; 2 3 import org.davidmoten.kool.Stream; 4 import org.davidmoten.kool.StreamIterable; 5 import org.davidmoten.kool.StreamIterator; 6 import org.davidmoten.kool.function.Function; 7 8 public final class Map<T, R> implements Stream<R> { 9 10 private final Function<? super T, ? extends R> function; 11 private final StreamIterable<T> source; 12 13 public Map(Function<? super T, ? extends R> function, StreamIterable<T> source) { 14 this.function = function; 15 this.source = source; 16 17 } 18 19 @Override 20 public StreamIterator<R> iterator() { 21 return new StreamIterator<R>() { 22 23 StreamIterator<T> it = source.iteratorNullChecked(); 24 25 @Override 26 public boolean hasNext() { 27 return it != null && it.hasNext(); 28 } 29 30 @Override 31 public R next() { 32 return function.applyUnchecked(it.nextNullChecked()); 33 } 34 35 @Override 36 public void dispose() { 37 if (it != null) { 38 it.dispose(); 39 it = null; 40 } 41 } 42 43 }; 44 } 45 46 }