anchor.diff:  
   video::OH89bHb5yzo[youtube]
   ====
  -* Batch / Window by time
  +
  +==== Batch / Window by time
   
   Batch / Window by time group elements into either a List (Batch) or Streamable (Window) based on the time bucket they pass through the Stream.
   
  
positive.code: ====
  The idea of batching elements into time buckets might seem absurd if you are used to creating Java 8 Streams from already populated collections. This is can be really useful if you use cyclops-streams in conjunction with simple-react, you can connect Streams to collections that are populated asynchronously, for example on recieving a web request an async Queue could be populated that has a processing SequenceM attached. 
  ====
  * Batch / Window by size and time
  
  Much like batchBySize groups elements into Lists based on the specified list size, and windowBySize organises streaming elements into Streamables by time bucket- batchBySizeAndTime / windowBySizeAndTime populates Lists (or Streamables) based on which ever criteria is met first. Should the max size be reached the List / Streamable is ready to move down stream, should the max time elaspe - ditto.
  
  
negative.code: java.util.stream.Stream<T>, org.jooq.lambda.Seq<T>, java.lang.Iterable<T>, org.reactivestreams.Publisher<T> and adds additional operators.
  
  StreamUtils, Streamable and SequenceM share many operators, in general though SequenceM has the larest range of operators.
  
  [IMPORTANT]
  ====
  Some knowledge of the Java 8 Streams API is assumed here. SequenceM provides all of the Stream operations (by inheriting from Stream) and a lot more. The Oracle tutorial for Streams is a good place to start if you are brand new to this concept.
  ====
  
  
  === Introduction to StreamUtils
  
  