private static Map dateMap = new TreeMap<>();

public static void dateHandle(long startTime, long endTime){

if(startTime>endTime) return;

if (MapUtils.isEmpty(dateMap)) {

dateMap.put(startTime, endTime);

return;

}

//TreeMap能自动根据Key排序,只需要合并交集

//1、有交集则合并

//2、没有交集则添加

Iterator> iterator = dateMap.entrySet().iterator();

while (iterator.hasNext()) {

Map.Entry entry = iterator.next();

Long start = entry.getKey();

Long end = entry.getValue();

if(startTime=start && endTime<=end) {

iterator.remove();

dateMap.put(startTime, end);

} else if(startTimeend) {

iterator.remove();

dateMap.put(startTime, endTime);

} else if(endTime>end && startTime>=start && startTime<=end) {

iterator.remove();

dateMap.put(start, endTime);

} else if(endTimeend) {

//确定集合已经遍历完

if(!iterator.hasNext())

dateMap.put(startTime, endTime);

}

}

}

给出自己的测试数据,输入:

2020-01-12 08:01:07    2020-01-16 08:41:08

2020-01-14 10:52:36    2020-01-16 08:51:22

2020-01-14 10:52:48    2020-01-20 08:19:00

2020-01-14 23:37:51    2020-01-14 23:39:11

2020-02-25 13:21:43    2020-02-25 13:31:52

2020-04-16 14:46:03    2020-04-16 14:47:31

2020-06-17 09:51:39    2020-06-17 09:53:01

2020-06-04 09:41:29    2020-06-04 09:42:44

2020-06-01 12:20:27    2020-06-01 12:21:15

2020-07-09 12:56:15    2020-07-09 12:58:11

2020-06-11 17:25:16    2020-06-11 17:26:55

2020-07-09 12:58:27    2020-07-09 12:59:38

2020-07-02 08:57:07    2020-07-02 09:00:23

2020-07-13 18:19:17    2020-07-13 18:20:21

2020-07-22 11:23:27    2020-07-22 11:27:00

2020-07-23 14:47:20    2020-11-26 17:18:45

2020-07-30 08:25:54    2020-07-30 08:27:28

2020-07-29 16:58:47    2020-07-29 17:00:00

2020-07-30 08:21:59    2020-07-30 08:24:37

2020-07-30 18:00:17    2020-07-30 18:01:09

2020-08-07 08:59:12    2020-08-10 08:20:35

2020-08-11 08:02:35    2020-08-11 08:03:33

处理后输出:

2020-01-12 08:01:07, 2020-01-20 08:19:00

2020-02-25 01:21:43, 2020-02-25 01:31:52

2020-04-16 02:46:03, 2020-04-16 02:47:31

2020-06-01 12:20:27, 2020-06-01 12:21:15

2020-06-04 09:41:29, 2020-06-04 09:42:44

2020-06-11 05:25:16, 2020-06-11 05:26:55

2020-06-17 09:51:39, 2020-06-17 09:53:01

2020-07-02 08:57:07, 2020-07-02 09:00:23

2020-07-09 12:56:15, 2020-07-09 12:58:11

2020-07-09 12:58:27, 2020-07-09 12:59:38

2020-07-13 06:19:17, 2020-07-13 06:20:21

2020-07-22 11:23:27, 2020-07-22 11:27:00

2020-07-23 02:47:20, 2020-11-26 05:51:12

原版因为时间是long,自己debug时做了一个调试版,一并附上:

private static Map dateMap = new ConcurrentSkipListMap<>();

public static void dateHandle(Date startTime, Date endTime){

if(startTime.after(endTime)) return;

if (MapUtils.isEmpty(dateMap)) {

dateMap.put(startTime, endTime);

return;

}

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String startTimeFor = sdf.format(startTime);

String endTimeFor = sdf.format(endTime);

Map tempMap = new TreeMap<>();

//TreeMap能自动根据Key排序,只需要合并交集

//1、有交集则合并

//2、没有交集则添加

Iterator> iterator = dateMap.entrySet().iterator();

while (iterator.hasNext()) {

Map.Entry entry = iterator.next();

Date start = entry.getKey();

Date end = entry.getValue();

String startFor = sdf.format(start);

String endFor = sdf.format(end);

if(startTime.before(start) && (endTime.after(start) ||

endTime.equals(start)) && (endTime.before(end) || endTime.equals(end))) {

iterator.remove();

dateMap.put(startTime, end);

} else if(startTime.before(start) && endTime.after(end)) {

iterator.remove();

dateMap.put(startTime, endTime);

} else if(endTime.after(end) && (startTime.after(start) ||

startTime.equals(start)) && (startTime.before(end) || startTime.equals(end))) {

iterator.remove();

dateMap.put(start, endTime);

} else if(endTime.before(start) || startTime.after(end)) {

if(!iterator.hasNext())

dateMap.put(startTime, endTime);

}

}

}

文章来源: blog.csdn.net,作者:w19912002,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/w19912002/article/details/110199710

java 时间段求并集_java多个时间段 互相有交集求并集的问题相关推荐

  1. Java中两个List之间的比较(差集,交集,并集)

    实现比较两个List之间的差异,包括获取两List的差集,交集,并集(不去重&去重)的API解法和优化解法的解决方案. 求差集 /*** 差集(基于API解法) 适用于小数据量* 求List1 ...

  2. linux求数组的交集,shell/bash 交集、并集、差集

    方法一(直接用文件名):取两个文本文件的并集.交集.差集 并: sort -m 交: sort -m 差 file1 - file2: sort -m 方法二(用变量参数):取两个文本文件的并集.交集 ...

  3. java 时间段求并集,java集合操作-----求两个集合的交集和并集

    2019独角兽企业重金招聘Python工程师标准>>> java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例 ...

  4. SQL求最高在线人数以及最高峰时间段

    需求分析 数据为主播ID,sdt表示开播时间,edt表示下播时间. 求: (1)该平台某一天主播同时在线人数最高为多少? (2)出现最高峰的时间段是哪个时间? 建表 注:我用的oracle实现的 DR ...

  5. java集合操作-----求两个集合的交集和并集

    java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例子测试一下:(例子中以java.util.LinkedList为例) 求连 ...

  6. java判断当前时间是否在对应时间段内

    /*** @param beginTime 开始时间* @param endTime 结束时间* @return true在时间段内,false不在时间段内*/ public static boole ...

  7. 【分享】Java集合求交集、并集、差集

    面试场景: 之前遇到一个长得很有趣的面试官问两个集合怎么求他们的交集.并集.茶集,回答之后觉得非常有意思,在这里记录一下: 概念说明 一.交集 交集:两个集合的公共(相交)部分,如下图: 代码案例: ...

  8. 对集合进行求交集、并集、差集

    对集合的元素进行计算操作 交集:求两集合相同元素 并集:求两集合全部元素(即用addAll()) 差集:求一个集合中剔除另一个集合所剩下的元素.(即用removeAll()) public class ...

  9. java集合的交集,并集,差集

    原文地址 http://blog.csdn.net/qq_25806863/article/details/70312046 今天要用到差集,突然懵逼了,然后脑子一抽写出了下面的代码 Set<S ...

  10. java时间格式转换_Java中System.currentTimeMillis()计算方式与时间的单位转换

    学会与时间赛跑才能赢得时间的尊重,把握好每一天,趁年轻! java中获取系统当前时间相信大家都会,这是经常用到的也是非常简单的,但还是要经常回顾下一些小细节哦! 一.时间的单位转换 1秒=1000毫秒 ...

最新文章

  1. 李永乐线性代数手写笔记-线性方程组
  2. VB.NET 中的 As New 以及型別指定
  3. Linux下编译运行Go程序
  4. linux 移动硬盘 优化,不花一分钱,给移动硬盘加速
  5. 虚拟终端网络工程实施纪要
  6. LED的本质和发光原理是什么,彩色的LED灯是怎么做出来的
  7. 程序员锁死服务器导致公司倒闭,案件终于开庭了
  8. CentOS 6.5安装chromium
  9. 网络摄像头的地盘争夺战——四款僵尸软件的技术解析
  10. html图书馆占座系统,图书馆选座系统,再也不用担心有人占座啦!
  11. 如何理解IPD+CMMI+Scrum一体化研发管理解决方案之IPD?
  12. 从产品模式到生活方式,苏宁小Biu车联网迈过了哪些坎?
  13. matlab 最舒适的背景配色
  14. PCB板检测机(PCB板外观缺陷视觉检测设备)
  15. Python 交通仿真建模(1)
  16. 年货:Python技术知识清单(数据分析)
  17. 机器学习算法(十) 根据幸福感问卷调查做预测
  18. 键盘一直自动按/问题的解决。。。
  19. java迅雷下载excel,Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...
  20. 古月 ROS移动机器人实战5.3ROS导航框架介绍笔记

热门文章

  1. 社团联合会计算机教程,计算机与信息工程学院学生社团联合会
  2. 《哈利波特》最低折扣
  3. python实现:无刻度的一大一小水罐取水问题
  4. 动态SQL之choose
  5. 详解 LVS、Nginx 及 HAProxy 工作原理
  6. 如何提高用户粘性,增强活跃度?
  7. 傅里叶分析之看不懂就掐死我吧(完整版)
  8. Ubuntu 部署 Flask + WSGI + Nginx 详解
  9. ffmpeg开发打印音视频meta信息
  10. 读《南怀瑾讲人生哲理》