よく考えもせずに、安易に 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 を指定することになって、ちょっと使いづらい。