簡體   English   中英

Java:將日期列表分成多個子列表,這些子列表表示原始列表中的天數范圍

[英]Java: split a list of Dates in sublists that rappresent ranges of days from original lists

我有一個日期列表(或從joda時間開始的DateMidnight),在這里我將類似日期dd / MM / yyyy的日期重復出現,例如:

[01/01/2010,02/01/2010,03/01/2010,05/01/2010,10/01/2010,11/01/2010,22/01/2010,23/01/2010,24 / 01/2010]

我想從該列表中獲得另一個列表,其中包含一些子列表,這些子列表代表了原始列表中連續幾天的范圍,例如:

[[01/01/2010,03/01/2010],[05/01 / 2010、05 / 01/2010],[10/01 / 2010、11 / 01/2010],[22/01/2010, [24/01/2010]]

我怎樣才能做到這一點 ?

謝謝

addAll這些列表添加到TreeSet ; 這將使列表項變得唯一並對其進行排序。

然后將subList初始化為一個空列表並遍歷該Set。

  • 如果子列表為空,請接受集合中鍵的任何日期。
  • 如果子列表不為空,並且集合中的日期=子列表中的最后日期+ 1天,則將新日期添加到集合中
  • 如果子列表不為空且日期不連續,則將您的子列表轉儲到另一個列表,並以新的空子列表開始。

  • 當您跳出循環時,如果子列表不為空,則這是您要添加到列表列表中的最后一個列表。


細化。

嚴格來說,您的超級集合不需要包含每個子范圍的日期列表。 您可以優化並簡單地存儲包含開始日期和結束日期的對象。

另一個優化:您存儲的子列表也不需要包含所有單獨的日期。 同樣,開始日期和結束日期也可以。

我建議您建立一個名為DateRange的類,其中包含兩個日期。

假設您的清單中有偶數個日期

List dateList = //contains the dates
Collections.sort(dateList);

List result = new ... // to store the list of intervals
for(int i=0; i<dateList.size-1; i+=2) {
    List interval = new ...// to store one interval
    interval.add(dateList.get(i));
    interval.add(dateList.get(i+1));
    result.add(interval)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM