合并时间段去重
先做排序,后判断时间交叉,合并时间段去重
代码如下
/** * 合并去重时间段 * * @return */ public static List<Map<String, Date>> getTimePeriodListDumplictcatePeriod(List<Map<String, Date>> periodList) { List<Map<String, Date>> result = new ArrayList<>(); //列表不能为空 if (periodList == null) { return null; } //对数据排序,开始时间从小到大 Collections.sort(periodList, new Comparator<Map<String, Date>>() { @Override public int compare(Map<String, Date> u1, Map<String, Date> u2) { long diff = u1.get("startDate").getTime() - u2.get("startDate").getTime(); if (diff > 0) { return 1; } else if (diff < 0) { return -1; } return 0; //相等为0 } }); for (int i = 0; i < periodList.size() - 1; i++) { int j = i + 1; //判断 i的Endtime 与j 的Begintime 是否有交叉,有交叉,更新 j的Begintime 为i的Begintime, 并移除i if (periodList.get(i).get("endDate").after(periodList.get(i).get("startDate"))) { periodList.get(j).put("startDate", periodList.get(i).get("startDate")); periodList.remove(i); i--; } } result = periodList; return result; }