package org.gcube.data.streams.delegates; import org.gcube.data.streams.Stream; import org.gcube.data.streams.generators.Generator; /** * A {@link Stream} of elements generated by the elements of an input {@link Stream} * * @author Fabio Simeoni * * @param the type of elements of the input stream * @param the type of stream elements */ public class PipedStream extends AbstractDelegateStream { private final Generator generator; /** * Creates an instance with a {@link Stream} and an element {@link Generator}. * @param stream the stream * @param generator the generator * @throws IllegalArgumentException if the stream or the generator are null */ public PipedStream(Stream stream,Generator generator) throws IllegalArgumentException { super(stream); if (generator == null) throw new IllegalArgumentException("invalid null generator"); this.generator=generator; } @Override protected E2 delegateNext() { return generator.yield(stream().next()); } @Override protected boolean delegateHasNext() { return stream().hasNext(); } }