2010-07-22 84 views
0

我有一個日期列表(或來自喬達時間的DateMidnight)我在這裏提到像dd/MM/yyyy這樣的日期以用於semplicity,例如:Java:將原始列表中日期的日期列表中的日期列表分開

[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]

我想從該列表中,以獲得包含rappresent的連續天的範圍從原始列表,這樣子列表另一個列表:

[[01/01/2010年3月1日],[05/01/2010,05/01/2010],[10/01/2 010,11/01/2010],[22/01/2010,24/01/2010]]

我該怎麼做?

感謝

回答

1

addAll這些名單爲TreeSet;這將使這兩個列表項唯一併對它們進行排序。

然後將一個subList初始化爲一個空列表並循環該Set。

  • 如果子列表爲空,則接受來自集合中的鍵的任何日期。
  • 如果子列表不爲空,並從子列表+ 1天集=最後日期的日期,添加新的日期設定
  • 如果子表是不是空的,日期是不連續的,轉儲子列表,以另一個列表並從一個新的空子列表開始。

  • 當您不在循環中時,如果子列表不是空的,那麼這是您添加到列表列表的最後一個列表。


改進。

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

另一個優化:你存儲的子列表也不需要包含你所有的個人日期。再說一遍,開始和結束日期都可以。

我建議你建立一個名爲DateRange的類,它包含兩個日期。

0

假設你的列表中有偶數日期

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) 
}