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 }