Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:在子列表中拆分日期列表,该子列表显示从原始列表到日期的范围_Java - Fatal编程技术网

Java:在子列表中拆分日期列表,该子列表显示从原始列表到日期的范围

Java:在子列表中拆分日期列表,该子列表显示从原始列表到日期的范围,java,Java,我有一个日期列表(或joda时间的DateMidnight),我在这里显示了日期,如semplicity的文本dd/MM/yyyy,例如: [2010年1月1日、2010年1月2日、2010年1月3日、2010年1月5日、2010年1月10日、2010年1月11日、2010年1月22日、2010年1月23日、2010年1月24日] 我想从这个列表中获得另一个列表,其中包含子列表,这些子列表显示了原始列表中连续天数的范围,如下所示: 2010年1月1日,2010年1月3日,2010年1月5日,20

我有一个日期列表(或joda时间的DateMidnight),我在这里显示了日期,如semplicity的文本dd/MM/yyyy,例如:

[2010年1月1日、2010年1月2日、2010年1月3日、2010年1月5日、2010年1月10日、2010年1月11日、2010年1月22日、2010年1月23日、2010年1月24日]

我想从这个列表中获得另一个列表,其中包含子列表,这些子列表显示了原始列表中连续天数的范围,如下所示:

2010年1月1日,2010年1月3日,2010年1月5日,2010年1月5日,2010年1月10日,2010年1月11日,2010年1月22日,2010年1月24日

我该怎么做


谢谢

将所有这些列表添加到
树集
;这将使列表项唯一并对其进行排序

然后将
子列表初始化为空列表,并循环遍历该集合

  • 如果子列表为空,则接受集合中键的任何日期
  • 如果子列表不为空,且集合中的日期=子列表中的最后日期+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)
}
List dateList=//包含日期
集合。排序(日期列表);
列表结果=新建…//存储间隔列表的步骤
对于(int i=0;i