java 时间段求并集_java多个时间段 互相有交集求并集的问题
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多个时间段 互相有交集求并集的问题相关推荐
- Java中两个List之间的比较(差集,交集,并集)
实现比较两个List之间的差异,包括获取两List的差集,交集,并集(不去重&去重)的API解法和优化解法的解决方案. 求差集 /*** 差集(基于API解法) 适用于小数据量* 求List1 ...
- linux求数组的交集,shell/bash 交集、并集、差集
方法一(直接用文件名):取两个文本文件的并集.交集.差集 并: sort -m 交: sort -m 差 file1 - file2: sort -m 方法二(用变量参数):取两个文本文件的并集.交集 ...
- java 时间段求并集,java集合操作-----求两个集合的交集和并集
2019独角兽企业重金招聘Python工程师标准>>> java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例 ...
- SQL求最高在线人数以及最高峰时间段
需求分析 数据为主播ID,sdt表示开播时间,edt表示下播时间. 求: (1)该平台某一天主播同时在线人数最高为多少? (2)出现最高峰的时间段是哪个时间? 建表 注:我用的oracle实现的 DR ...
- java集合操作-----求两个集合的交集和并集
java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例子测试一下:(例子中以java.util.LinkedList为例) 求连 ...
- java判断当前时间是否在对应时间段内
/*** @param beginTime 开始时间* @param endTime 结束时间* @return true在时间段内,false不在时间段内*/ public static boole ...
- 【分享】Java集合求交集、并集、差集
面试场景: 之前遇到一个长得很有趣的面试官问两个集合怎么求他们的交集.并集.茶集,回答之后觉得非常有意思,在这里记录一下: 概念说明 一.交集 交集:两个集合的公共(相交)部分,如下图: 代码案例: ...
- 对集合进行求交集、并集、差集
对集合的元素进行计算操作 交集:求两集合相同元素 并集:求两集合全部元素(即用addAll()) 差集:求一个集合中剔除另一个集合所剩下的元素.(即用removeAll()) public class ...
- java集合的交集,并集,差集
原文地址 http://blog.csdn.net/qq_25806863/article/details/70312046 今天要用到差集,突然懵逼了,然后脑子一抽写出了下面的代码 Set<S ...
- java时间格式转换_Java中System.currentTimeMillis()计算方式与时间的单位转换
学会与时间赛跑才能赢得时间的尊重,把握好每一天,趁年轻! java中获取系统当前时间相信大家都会,这是经常用到的也是非常简单的,但还是要经常回顾下一些小细节哦! 一.时间的单位转换 1秒=1000毫秒 ...
最新文章
- 李永乐线性代数手写笔记-线性方程组
- VB.NET 中的 As New 以及型別指定
- Linux下编译运行Go程序
- linux 移动硬盘 优化,不花一分钱,给移动硬盘加速
- 虚拟终端网络工程实施纪要
- LED的本质和发光原理是什么,彩色的LED灯是怎么做出来的
- 程序员锁死服务器导致公司倒闭,案件终于开庭了
- CentOS 6.5安装chromium
- 网络摄像头的地盘争夺战——四款僵尸软件的技术解析
- html图书馆占座系统,图书馆选座系统,再也不用担心有人占座啦!
- 如何理解IPD+CMMI+Scrum一体化研发管理解决方案之IPD?
- 从产品模式到生活方式,苏宁小Biu车联网迈过了哪些坎?
- matlab 最舒适的背景配色
- PCB板检测机(PCB板外观缺陷视觉检测设备)
- Python 交通仿真建模(1)
- 年货:Python技术知识清单(数据分析)
- 机器学习算法(十) 根据幸福感问卷调查做预测
- 键盘一直自动按/问题的解决。。。
- java迅雷下载excel,Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题)...
- 古月 ROS移动机器人实战5.3ROS导航框架介绍笔记