期間 DateのStreamを生成

期間を示す日付を指定して、java.util.Date 、もしくは、java.time.LocalDateStream が欲しくなったので、メソッドを用意

  Java8java.util.Dateを使うのも抵抗あるけど。。。

2015-10-01 と 2015-10-03 なら、10月1日~3日の3個が取得できるものとする。

public Stream<Date> createDateStream(Date start, Date end){
   LocalDateTime ldt = start.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();

   // 2つの日付→期間
   Period p = Period.between(start.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
                           , end.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
   );

   // IntStream から生成
   return IntStream.range(0, p.getDays() + 1)
         .mapToObj(i->ldt.plusDays(i))
         map(.d->Date.from(d.atZone(ZoneId.systemDefault()).toInstant()));
}


でも、LocalDate を指定して LocalDate の Stream を取得するのはもっと簡潔になる。

public Stream<LocalDate> createLocalDateStream(LocalDate start, LocalDate end){
   return IntStream.range(0, Period.between(start, end).getDays() + 1).mapToObj(i->start.plusDays(i));
}


わざわざメソッドにする必要性もないかもしれないけど。。。

java.util.Date を使うのやめようかな?