2010-07-22 81 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) 
}