Полагаю, Spliterator
может использоваться для определения разницы между датами. Например, для почасового увеличения HourlySpliterator может быть реализован следующим образом:
public class HourlySpliterator implements Spliterator<LocalDateTime>{
private final LocalDateTime endDate;
private LocalDateTime date;
public static Stream<LocalDateTime> of (LocalDateTime startDate, LocalDateTime endDate) {
return StreamSupport.stream(new HourlySpliterator(startDate, endDate), false);
}
private HourlySpliterator(LocalDateTime startDate, LocalDateTime endDate) {
this.date = startDate;
this.endDate = endDate;
}
@Override
public boolean tryAdvance(Consumer<? super LocalDateTime> action) {
Objects.requireNonNull(action);
action.accept(date);
if (date.isBefore(endDate)) {
date = date.plusHours(1);
return true;
}
return false;
}
@Override
public Spliterator<LocalDateTime> trySplit() {
return null;
}
@Override
public long estimateSize() {
return Long.MAX_VALUE;
}
@Override
public int characteristics() {
return DISTINCT | IMMUTABLE | NONNULL | ORDERED | SORTED ;
}
@Override
public Comparator<? super LocalDateTime> getComparator() {
return Comparator.naturalOrder();
}
}
Это можно проверить как:
@Test
public void test() throws Exception {
List<LocalDateTime> dates = new ArrayList<LocalDateTime>();
HourlySpliterator.of(LocalDateTime.parse("2007-12-03T10:15"), LocalDateTime.parse("2007-12-05T10:15"))
.forEach(dates::add);
System.out.println(dates);
}