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.Consumer;
7
8 public final class DoOnNext<T> implements Stream<T> {
9
10 private final Consumer<? super T> consumer;
11 private final StreamIterable<T> source;
12
13 public DoOnNext(Consumer<? super T> consumer, StreamIterable<T> source) {
14 this.consumer = consumer;
15 this.source = source;
16 }
17
18 @Override
19 public StreamIterator<T> iterator() {
20 return new StreamIterator<T>() {
21
22 final StreamIterator<T> it = source.iteratorNullChecked();
23
24 @Override
25 public boolean hasNext() {
26 return it.hasNext();
27 }
28
29 @Override
30 public T next() {
31 T t = it.nextNullChecked();
32 consumer.acceptUnchecked(t);
33 return t;
34 }
35
36 @Override
37 public void dispose() {
38 it.dispose();
39 }
40 };
41 }
42
43 }