View Javadoc
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  }