| import java.util.Comparator; |
| |
| interface BaseStream<T> {} |
| interface Stream<T> extends BaseStream<T> {} |
| interface IntermediateOp<E_IN, E_OUT> extends StreamOp<E_IN, Node<E_OUT>> {} |
| interface StreamOp<E_IN, R> {} |
| interface StatefulOp<E_IN, E_OUT> extends IntermediateOp<E_IN, E_OUT> {} |
| interface TerminalOp<E_IN, R> extends StreamOp<E_IN, R> {} |
| |
| interface Node<T> extends Iterable<T> {} |
| class SortedOp<T> implements StatefulOp<T, T> { |
| public SortedOp(Comparator<? super T> comparator) { |
| } |
| } |
| |
| class Usage<Ts> { |
| public <E, S extends BaseStream<E>> S pipeline(IntermediateOp<Ts, E> newOp) { return null; } |
| public <R> R pipeline(TerminalOp<Ts, R> terminal) { return null;} |
| |
| |
| public Stream<Ts> sorted(Comparator<? super Ts> comparator) { |
| return pipeline(new SortedOp<>(comparator)); |
| } |
| } |