Рекомендованные потоки данных
В Java 9 вы можете использовать следующий новый метод, LocalDate::datesUntil
:
LocalDate start = LocalDate.of(2017, 2, 1);
LocalDate end = LocalDate.of(2017, 2, 28);
Stream<LocalDate> dates = start.datesUntil(end.plusDays(1));
List<LocalDate> list = dates.collect(Collectors.toList());
Новый метод datesUntil(...)
работает с эксклюзивной датой окончания, отсюда и показано, как добавить день.
После получения потока вы можете использовать все функции, предоставляемые java.util.stream
- или java.util.function
-пакетами. Работа с потоками стала настолько простой по сравнению с более ранними подходами, основанными на пользовательских циклах for или while.
Или, если вы ищете потоковое решение, которое работает по умолчанию с включенными датами, но также может быть настроено иначе, тогда вы можете найти класс DateInterval в моей библиотеке Time4J интересным потому что он предлагает множество специальных функций для потоков данных, включая эффективный сплитератор, который работает быстрее, чем в Java-9:
PlainDate start = PlainDate.of(2017, 2, 1);
PlainDate end = start.with(PlainDate.DAY_OF_MONTH.maximized());
Stream<PlainDate> stream = DateInterval.streamDaily(start, end);
Или еще проще в случае полных месяцев:
Stream<PlainDate> februaryDates = CalendarMonth.of(2017, 2).streamDaily();
List<LocalDate> list =
februaryDates.map(PlainDate::toTemporalAccessor).collect(Collectors.toList());