You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调用HashMap值集合中Set存储的Meeting对象方法并校验单日会议时间重叠?

会议时间重叠校验实现方案

核心校验代码

你可以直接复用已实现的compareTo方法完成重叠校验,参考代码如下:

// 遍历所有日期对应的会议集合
for (Map.Entry<LocalDate, Set<Meeting>> entry : meetings.entrySet()) {
    LocalDate currentDate = entry.getKey();
    Set<Meeting> dailyMeetings = entry.getValue();
    // 会议数量小于2时不可能重叠,直接跳过
    if (dailyMeetings.size() < 2) {
        continue;
    }
    // 按会议开始时间排序,排序逻辑复用你写的compareTo方法
    List<Meeting> sortedMeetings = new ArrayList<>(dailyMeetings);
    Collections.sort(sortedMeetings);

    boolean existOverlap = false;
    // 相邻会议对比即可,排序后不需要全量两两对比
    for (int i = 0; i < sortedMeetings.size() - 1; i++) {
        Meeting pre = sortedMeetings.get(i);
        Meeting next = sortedMeetings.get(i + 1);
        // compareTo返回0代表两个会议时间重叠
        if (pre.compareTo(next) == 0) {
            existOverlap = true;
            System.out.printf("日期%s存在重叠会议:%s-%s 与 %s-%s%n",
                    currentDate,
                    pre.getStartTime(), pre.getFinishTime(),
                    next.getStartTime(), next.getFinishTime());
            // 此处添加你的拦截逻辑,比如抛出异常、返回预约失败提示
            break;
        }
    }
    if (existOverlap) {
        // 终止后续日期校验
        break;
    }
}

优化建议

  • 如果你使用TreeSet作为Set接口的实现类,只要compareTo返回0就会被判定为重复元素,重叠的会议会被自动去重,预约阶段就可以直接拦截,不需要额外写校验逻辑
  • 现有compareTo方法依赖第三方Interval类,你可以用JDK原生API替换,避免额外依赖:
@Override
public int compareTo(Meeting that) {
    // 时间段重叠判定规则:A开始时间 < B结束时间 && A结束时间 > B开始时间
    boolean overlap = this.startTime.isBefore(that.finishTime) && this.finishTime.isAfter(that.startTime);
    if (overlap) {
        return 0;
    }
    return this.startTime.compareTo(that.startTime);
}

内容的提问来源于stack exchange,提问作者A. Nabeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:24:03