我们如何使用Java Streams方法收集在for循环中生成的对象?

例如,这里我们通过重复调用 LocalDate ,以 YearMonth 表示的一个月中的每一天的每一天生成一个 YearMonth::atDay 对象。

YearMonth ym = YearMonth.of( 2017 , Month.AUGUST ) ;
List<LocalDate> dates = new ArrayList<>( ym.lengthOfMonth() );
for ( int i = 1 ; i <= ym.lengthOfMonth () ; i ++ ) {
    LocalDate localDate = ym.atDay ( i );
    dates.add( localDate );
}

可以使用流重写吗?

最佳答案

可以从IntStream开始重写它:

YearMonth ym = YearMonth.of(2017, Month.AUGUST);
List<LocalDate> dates =
        IntStream.rangeClosed(1, ym.lengthOfMonth())
        .mapToObj(ym::atDay)
        .collect(Collectors.toList());

IntStream中的每个整数值都映射到所需的日期,然后将日期收集在列表中。

10-01 22:08