2016-11-18 36 views
3

我有以下方法,其中我有startDateendDate類型字符串yyyy/mm/dd。我想返回一個List<LocalDate>如何從給定範圍內建立LocalDate的列表?

protected List<LocalDate> getDateList(String startDate, String endDate) { 

//build list here 

} 

如何在Java 8中執行此操作?

+0

請在發佈前搜索棧溢出。 –

回答

11

假設輸入數據是正確的,我們可以使用流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)

4

accepted answer是正確的,是一個很好的。

但是,有一種替代解決方案,我們在天數內創建了一個LongStream。此處rangeClosed()確保創建包含最後一天的多頭多頭頭寸。如果最後一天不應包含在清單中,請換成range()

與pivovarit提出的解決方案相比,這樣做的好處是我們不需要將long翻錄爲int。此外,由於我們可以使用rangeClosed()range(),我們不需要days + 1伎倆包含/排除的最後日期:

相關問題