Java如何将若干时间区间进行合并的方法步骤:
1.首先需要将若干时间区间存储到一个List集合中。时间区间可以使用Java中的Date或LocalDateTime对象来表示,或者使用字符串表示,需要转换为相应的日期对象。
2.对这个区间集合进行排序,按照开始时间升序排序。
3.新建一个结果集合,将第一个区间加入结果集合,用一个current指针指向结果集合中的最后一个区间。
4.遍历剩余的区间,判断当前区间与结果集合中的最后一个区间是否有重叠部分:
-
如果没有重叠部分,将当前区间加入结果集合中。
-
如果有重叠部分,将当前区间与结果集合中的最后一个区间进行合并,即将当前区间的结束时间更新为两个时间段结束时间的最大值,同时更新结果集合中最后一个区间的结束时间。
5.遍历完所有区间后,结果集合中即为合并后的时间段集合。
以下是示例:
示例一:
假设需要将以下时间段进行合并:
[2022-01-01 08:00:00, 2022-01-01 10:00:00]
[2022-01-01 09:00:00, 2022-01-01 11:00:00]
[2022-01-01 13:00:00, 2022-01-01 14:00:00]
Java代码示例:
List<LocalDateTime[]> intervals = new ArrayList<>();
intervals.add(new LocalDateTime[]{LocalDateTime.of(2022,1,1,8,0,0), LocalD#atetime.of(2022,1,1,10,0,0)});
intervals.add(new LocalDateTime[]{LocalDateTime.of(2022,1,1,9,0,0), LocalDateTime.of(2022,1,1,11,0,0)});
intervals.add(new LocalDateTime[]{LocalDateTime.of(2022,1,1,13,0,0), LocalDateTime.of(2022,1,1,14,0,0)});
Collections.sort(intervals, Comparator.comparing(interval -> interval[0]));
List<LocalDateTime[]> merged = new ArrayList<>();
merged.add(intervals.get(0));
LocalDateTime[] current = intervals.get(0);
for (int i = 1; i < intervals.size(); i++) {
LocalDateTime[] interval = intervals.get(i);
if (interval[0].isAfter(current[1])) {
merged.add(interval);
current = interval;
} else {
current[1] = interval[1].isAfter(current[1]) ? interval[1] : current[1];
}
}
merged.forEach(interval -> System.out.println(Arrays.toString(interval)));
运行结果:
[2022-01-01T08:00, 2022-01-01T11:00]
[2022-01-01T13:00, 2022-01-01T14:00]
说明合并后得到了两个时间区间:[2022-01-01 08:00:00, 2022-01-01 11:00:00]和[2022-01-01 13:00:00, 2022-01-01 14:00:00]。
示例二:
假设需要将以下时间段进行合并:
[2022-01-01 08:00:00, 2022-01-01 09:00:00]
[2022-01-01 10:00:00, 2022-01-01 12:00:00]
[2022-01-01 09:00:00, 2022-01-01 11:00:00]
[2022-01-01 13:00:00, 2022-01-01 14:00:00]
Java代码示例:
List<Date[]> intervals = new ArrayList<>();
intervals.add(new Date[]{new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-01-01 08:00:00"), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-01-01 09:00:00")});
intervals.add(new Date[]{new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-01-01 10:00:00"), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-01-01 12:00:00")});
intervals.add(new Date[]{new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-01-01 09:00:00"), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-01-01 11:00:00")});
intervals.add(new Date[]{new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-01-01 13:00:00"), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-01-01 14:00:00")});
Collections.sort(intervals, Comparator.comparing(interval -> interval[0]));
List<Date[]> merged = new ArrayList<>();
merged.add(intervals.get(0));
Date[] current = intervals.get(0);
for (int i = 1; i < intervals.size(); i++) {
Date[] interval = intervals.get(i);
if (interval[0].after(current[1])) {
merged.add(interval);
current = interval;
} else {
current[1] = interval[1].after(current[1]) ? interval[1] : current[1];
}
}
merged.forEach(interval -> System.out.println(Arrays.toString(interval)));
运行结果:
[Sat Jan 01 08:00:00 CST 2022, Sat Jan 01 12:00:00 CST 2022]
[Sat Jan 01 13:00:00 CST 2022, Sat Jan 01 14:00:00 CST 2022]
说明合并后得到了两个时间区间:[2022-01-01 08:00:00, 2022-01-01 12:00:00]和[2022-01-01 13:00:00, 2022-01-01 14:00:00]。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java如何将若干时间区间进行合并的方法步骤 - Python技术站