code: public static <W extends Collection<T>, T> Iterator<W> window(int windowSize, Iterator<T> iterator, Supplier<W> supplier) {
          return new PreciseWindowIterator<W, T>(iterator, windowSize, supplier);
      }
docs: Adapts an iterator to an iterator showing a sliding window of the
  contained elements. e.g: iterator: [1,2,3] windowSize: 2 -> [[1,2],
  [2,3]]
  
  @param <W> the window type
  @param <T> the iterator element type
  @param windowSize the window size
  @param iterator the iterable to be adapted
  @param supplier the supplier providing the window collection
  @return the window iterator