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