code: public static <T> Stream<List<T>> windowed(Stream<T> source, int windowSize, int skip){
          return windowed(source, windowSize, skip, false);
      }
docs: Constructs a windowed stream where each element is a list of the window size
  and the skip is the offset from the start of each window.
  
  For example, a skip of size 1 is a traditional window a la ([1, 2, 3], [2, 3, 4] ...).
  
  A skip of size 2 for a window of size 3 would look like
  ([1, 2, 3], [3, 4, 5], ...)
  
  If the stream finishes, the last window is guaranteed to be of the desired size (possible data loss).
  
  A stream [1, 2, 3] with a size 2 and skip 2 will result in ([1,2])
  
  @param source The input stream
  @param windowSize The window size
  @param skip The skip amount between windows
  @param <T> The type over which to stream
  @return A stream of lists representing the windows