日付リストを Stream で生成する方法について

よく考えもせずに、安易に IntStream で map 変換して作っていた。
10日分の日付リスト

List<LocalDate> list = IntStream.range(0, 10).boxed()
.map(i->LocalDate.now().plusDays(i)).collect(Collectors.toList());

java.util.stream.Stream の iterator を使えば、、、

List<LocalDate> list 
= Stream.iterate(LocalDate.now(), t->t.plusDays(1)).limit(10).collect(Collectors.toList());

IntStream → map の方法は、1日おきの10日分をつくろうとすると
ちょっと変更せねばならず、辛くなる。

List<LocalDate> list = IntStream.rangeClosed(1, 10).boxed()
.map(i->LocalDate.now().plusDays((i-1)*2)).collect(Collectors.toList());

java.util.stream.Stream の iterator を使う方法ならもっと直感的で、

List<LocalDate> list 
= Stream.iterate(LocalDate.now(), t->t.plusDays(2)).limit(10).collect(Collectors.toList());

とここまで、Java8 での話である。
Java9 以降なら、
LocalDate.datesUntil() というのがあって、

Stream<LocalDate> datesUntil(LocalDate end)
Stream<LocalDate> datesUntil(LocalDate end, Period step)

同様に、、
連日の10日分

List<LocalDate> list 
= LocalDate.now().datesUntil(LocalDate.now().plusDays(10))
.collect(Collectors.toList());

1日おきの10日分

List<LocalDate> list 
= LocalDate.now().datesUntil(LocalDate.now().plusDays(10*2), Period.ofDays(2))
.collect(Collectors.toList());

こちらは、endDate を指定することになって、ちょっと使いづらい。