Java8 Stream Sliding Window
private static <T> Stream<List<T>> sliding(List<T> list, int size) {
if (size > list.size()) {
return Stream.empty();
} else {
return IntStream.range(0, list.size() - size + 1)
.mapToObj(start -> list.subList(start, start + size));
}
}