求时间段并集

2024-01-10 00:58
文章标签 并集 时间段

本文主要是介绍求时间段并集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

区间类

@Setter
@Getter
public class TimeZone {/** 起始时间 */private String startTime;/** 终止时间 */private String endTime;}

合并方法

public List<TimeZone> getTimeZoneUnion(List<TimeZone> timeZoneList) {List<TimeZone> mergeTimeZoneList = new ArrayList<>();List<TimeZone> lastTimeZoneList = timeZoneList;int lastSize = lastTimeZoneList.size();int mergeSize = mergeTimeZoneList.size();// 防止死循环int count = 0;while ((lastSize != mergeSize) || count > 50) {lastTimeZoneList = mergeTimeZone(lastTimeZoneList);lastSize = lastTimeZoneList.size();mergeTimeZoneList = mergeTimeZone(lastTimeZoneList);mergeSize = mergeTimeZoneList.size();count++;}return mergeTimeZoneList;}private List<TimeZone> mergeTimeZone(List<TimeZone> timeZoneList){try {HashMap<Date, Date> dateMap = new HashMap<>(16);SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");for (TimeZone timeZone : timeZoneList) {Date startTime = dateFormat.parse(timeZone.getStartTime());Date endTime = dateFormat.parse(timeZone.getEndTime());//第一个时间if (MapUtils.isEmpty(dateMap)) {dateMap.put(startTime, endTime);} else {List<Date> dateList = new ArrayList<>(dateMap.keySet());for (int i = 0; i < dateList.size(); i++) {Date start = dateList.get(i);Date end = dateMap.get(start);if(end != null){if ((startTime.before(start) || startTime.equals(start))&& (endTime.after(start) || endTime.equals(start))&& (endTime.before(end) || endTime.equals(end))) {// 起点早于该区间 终点属于该区间dateMap.remove(start);dateMap.put(startTime, end);} else if ((startTime.before(start) || startTime.equals(start))&& (endTime.after(end) || endTime.equals(end))) {// 起点早于该区间 终点晚于该区间dateMap.remove(start);dateMap.put(startTime, endTime);} else if ((endTime.after(end) || endTime.equals(end))&& (startTime.after(start) || startTime.equals(start))&& (startTime.before(end) || startTime.equals(end))) {// 终点晚于该区间 起点属于该区间dateMap.put(start, endTime);} else if (endTime.before(start) || startTime.after(end)) {if (i == dateList.size() - 1) {// 遍历完也没有重合的区间就加入dateMap.put(startTime, endTime);}}}}}}List<TimeZone> newTimeZoneList = new ArrayList<>();List<Date> dateList = CollectionUtil.sort(new ArrayList<>(dateMap.keySet()), (o1, o2) -> o1.getTime() >= o2.getTime() ? 1 : -1);for (Date date : dateList) {TimeZone timeZone = new TimeZone();timeZone.setStartTime(dateFormat.format(date));timeZone.setEndTime(dateFormat.format(dateMap.get(date)));newTimeZoneList.add(timeZone);}return newTimeZoneList;} catch (Exception e) {throw new RuntimeException(e);}}

这篇关于求时间段并集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/589012

相关文章

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat

AS-V1000视频平台web客户端在播放一个设备的录像视频过程中,某个时间段的录像播放失败的问题解决

目录 一.问题描述 二.问题解析 2.1确认问题相关信息 2.2查看录像文件是否存在 2.3确认当时设备在线情况 2.4确定问题发生原因 2.5问题避免措施 三.录像回放和录像查询的区别 3.1操作区别 3.3.1 录像回放操作说明 3.3.2录像查询操作说明 3.2 功能区别 3.3总结 一.问题描述        客户的一台视频设备接入AS-V1000视频

python list 求交集 差集 并集

#!/usr/bin/env python3# -*- coding: utf-8 -*-' a test module '__author__ = 'Zhang Shuai'a = [1,2,3,4]b = [3,4,5,6]'''求交集'''#方法1c = [i for i in a if i in b]#方法2c = list(set(a).intersection(se

机房收费系统问题集(4)——指定时间段数据查询+组合查询

最近一直处在“攻坚”阶段,指定时间段数据查询和组合查询两座大山终于拿下,现在整理一下,也不枉我的苦心经营了...... (1)指定时间段数据查询 首先添加DTPicker控件,这是个非常强大的控件,早知道有它,我肯定赚到好多时间...... 然后在你需要的地方画出来,它刚刚画出来的样式虽然很普通,但是,运行后,你会大吃一惊的 既能选择你想要的时间,又能立马回到今天

SQL查询:并集、差集、交集

新建两个表进行测试:  test_a IDname1曹操2郭嘉3孙权4周瑜 test_b IDname1刘备2关羽3张飞4孙权5周瑜 1.UNION形成并集   UNION可以对两个或多个结果集进行连接,形成“并集”。    子结果集所有的记录组合在一起形成新的结果集。 1、限定条件   要是用UNION来连接结果集,有4个限定条件。    (1)、子结果集要具有相同的结构。

力扣1124.表现良好的最长时间段

力扣1124.表现良好的最长时间段 单调栈 将所有>8的标为1,所有<=8的标为-1最终找到一段区间和为>0的区间下标i - j即最大化i - j (同962.) class Solution {public:int longestWPI(vector<int>& hours) {int n = hours.size() , res = 0,s[n+1];stack<int> st;s[

php获取各个时间段的时间

<?php echo "今天:".date("Y-m-d")."<br>"; echo "昨天:".date("Y-m-d",strtotime("-1 day")), "<br>"; echo "明天:".date("Y-m-d",strtotime("+1 day")). "<br>"; echo "一周后:".date("Y-m-d",strtotime("+1 week")). "<br

php按周取时间段

最近做统计需求,按周统计,获取周的时间段 代码逻辑: $start = '1478863624';$end = '1480505248';function getweek($start, $end){$ret = array();$i = 0;while($start <= $end){$ret[$i]['start'] = date('Y-m-d',$start);$tmp = st

【并集查找】839. 相似字符串组

本文涉及知识点 并集查找(并差集) 图论知识汇总 LeetCode839. 相似字符串组 如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。 例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与

集合并集交集差集【工具类】

一、使用Stream流进行处理 在Java开发中,对于集合的操作是非常常见的,特别是交集、并集和差集这样的操作。这些操作可以通过Java 8中的Stream API来实现。 •交集:取两个集合中相同的部分。例如,如果我们有两个List集合:list1和list2,我们可以使用list1.stream().filter(list2::contains).collect(Collectors.toL