我有以下方法,其中我有startDate
和endDate
類型字符串yyyy/mm/dd
。我想返回一個List<LocalDate>
如何從給定範圍內建立LocalDate的列表?
protected List<LocalDate> getDateList(String startDate, String endDate) {
//build list here
}
如何在Java 8中執行此操作?
我有以下方法,其中我有startDate
和endDate
類型字符串yyyy/mm/dd
。我想返回一個List<LocalDate>
如何從給定範圍內建立LocalDate的列表?
protected List<LocalDate> getDateList(String startDate, String endDate) {
//build list here
}
如何在Java 8中執行此操作?
假設輸入數據是正確的,我們可以使用流API生成在給定範圍內的所有日期:
final LocalDate start = LocalDate.parse(startDate, DateTimeFormatter.ofPattern("yyyy/MM/dd"));
final LocalDate end = LocalDate.parse(endDate, DateTimeFormatter.ofPattern("yyyy/MM/dd"));
final int days = (int) start.until(end, ChronoUnit.DAYS);
return Stream.iterate(start, d -> d.plusDays(1))
.limit(days)
.collect(Collectors.toList());
例子:
getDateList("2012/10/10", "2012/10/12")
[2012-10-10, 2012-10-11]
如果你想包含結束日期,你需要使用.limit(days + 1)
。
accepted answer是正確的,是一個很好的。
但是,有一種替代解決方案,我們在天數內創建了一個LongStream
。此處rangeClosed()
確保創建包含最後一天的多頭多頭頭寸。如果最後一天不應包含在清單中,請換成range()
。
與pivovarit提出的解決方案相比,這樣做的好處是我們不需要將long
翻錄爲int
。此外,由於我們可以使用rangeClosed()
或range()
,我們不需要days + 1
伎倆包含/排除的最後日期:
請在發佈前搜索棧溢出。 –