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 }