Java 多个时间段比较是否存在交集,并分为多个不相交的时间段
时间: 2024-05-01 22:22:00 浏览: 147
可以使用 Java 中的时间类来实现多个时间段比较是否存在交集,并分为多个不相交的时间段。具体实现步骤如下:
1. 定义一个时间段类,包括开始时间和结束时间两个属性。
2. 定义一个方法,接收多个时间段作为参数,判断这些时间段是否存在交集。
3. 如果存在交集,则将这些时间段合并成一个时间段,并将其从参数列表中移除。
4. 重复步骤2和3,直到所有时间段都被合并成不相交的时间段为止。
以下是示例代码:
```
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
public class TimeInterval {
private LocalDateTime start;
private LocalDateTime end;
public TimeInterval(LocalDateTime start, LocalDateTime end) {
this.start = start;
this.end = end;
}
public LocalDateTime getStart() {
return start;
}
public LocalDateTime getEnd() {
return end;
}
public static List<TimeInterval> getDisjointIntervals(List<TimeInterval> intervals) {
List<TimeInterval> disjointIntervals = new ArrayList<>();
while (!intervals.isEmpty()) {
TimeInterval firstInterval = intervals.remove(0);
LocalDateTime start = firstInterval.getStart();
LocalDateTime end = firstInterval.getEnd();
for (int i = 0; i < intervals.size(); i++) {
TimeInterval interval = intervals.get(i);
if (interval.getStart().isBefore(end) && interval.getEnd().isAfter(start)) {
start = start.isBefore(interval.getStart()) ? start : interval.getStart();
end = end.isAfter(interval.getEnd()) ? end : interval.getEnd();
intervals.remove(i);
i--;
}
}
disjointIntervals.add(new TimeInterval(start, end));
}
return disjointIntervals;
}
}
```
你可以通过调用 `getDisjointIntervals` 方法来获取不相交的时间段列表,例如:
```
List<TimeInterval> intervals = new ArrayList<>();
intervals.add(new TimeInterval(LocalDateTime.of(2022, 1, 1, 0, 0), LocalDateTime.of(2022, 1, 1, 10, 0)));
intervals.add(new TimeInterval(LocalDateTime.of(2022, 1, 1, 8, 0), LocalDateTime.of(2022, 1, 1, 12, 0)));
intervals.add(new TimeInterval(LocalDateTime.of(2022, 1, 1, 14, 0), LocalDateTime.of(2022, 1, 1, 16, 0)));
intervals.add(new TimeInterval(LocalDateTime.of(2022, 1, 1, 15, 0), LocalDateTime.of(2022, 1, 1, 18, 0)));
List<TimeInterval> disjointIntervals = TimeInterval.getDisjointIntervals(intervals);
for (TimeInterval interval : disjointIntervals) {
System.out.println(interval.getStart() + " - " + interval.getEnd());
}
```
输出结果为:
```
2022-01-01T00:00 - 2022-01-01T12:00
2022-01-01T14:00 - 2022-01-01T18:00
```
阅读全文