package nl.helixsoft.recordstream; import java.util.Collection; import java.util.Iterator; public abstract class AbstractStream<T> implements Stream<T> { @Override public Stream<T> filter (Predicate<T> predicate) { return new FilterStream (this, predicate); } @Override public <R> Stream<R> map(final Function<? super T,? extends R> mapper) { final Iterator<T> p = this.iterator(); return new AbstractStream<R>() { @Override public Iterator<R> iterator() { return new MappingIterator<R, T> (p, mapper); } }; } @Override public Collection<T> into(Collection<T> x) { for (T t : this) { x.add(t); } return x; } @Override public void close() { } }