code: public static <T> Iterator<List<Optional<T>>> centered(int windowSize, Iterator<T> iterator) {
          final Supplier<List<Optional<T>>> factory = Compositions.compose(new Vary<ArrayList<Optional<T>>, List<Optional<T>>>(), new ArrayListFactory<Optional<T>>());
          return new CenteredWindowIterator<List<Optional<T>>, T>(iterator, windowSize, factory);
      }
docs: Adapts an iterator to an iterator showing a sliding centered window of
  the contained elements. e.g: iterator: [1,2,3] windowSize: 3 ->
  [[nothing, just(1), just(2)], [just(1), just(2), just(3)], [just(2),
  just(3), nothing]]
  
  @param <T> the iterator element type
  @param windowSize the window size (must be an odd positive integer)
  @param iterator the iterator to be adapted
  @return the window iterator