Implement filterInstanceOf() to filter a stream by type more easily. Addresses #86, thanks @nipafx.
Implement groupOrdered(), and groupOrderedBy() to appropriately group elements in the input stream to lists in the output stream. Addresses #88, thanks @nipafx.
Implement ensureOrdred() and ensureOrderedBy() to ensure the given stream meets an ordering criteria, or fail exceptionally otherwise
Implement filterOrdered() and filterOrderedBy() to remove non-ordered elements from the input stream
Implement window() to provide more options to windowing functions, namely - ability to specify size, how many to skip each time, and whether to include partial windows
Implement repeat(n) and repeatInfinitely() to repeatedly emit the input stream to the output stream
Implement rotate(n) rotate the stream either left or right (consumes entire stream)
Renamed everyNth(n) to takeEveryNth(n) and added dropEveryNth(n) for completeness
Renamed filterWithIndex() to filterIndexed() to match other indexing Gatherers
Renamed cross() to crossWith() for consistency
Renamed interleave() to interleaveWith() for consistency
Renamed grouping() to group() and groupingBy() to groupBy() for consistency
Implement reverse() - Cause a stream to be emitted in reverse (stores entire stream in memory)
Implement maxBy(fn) and minBy(fn) - Finds the single maximum or minimum value in a stream as defined by the function given (stores entire stream in memory)
Implement exactSize(n) - Ensures a stream is precisely n elements long or throws an IllegalStateException (stores entire stream in memory)