一个日期时间段有交集求并集的问题
2018-01-04 14:30
387 查看
同学工作中遇到的,问题大概是:输入一系列时间段(开始日期start,结束日期end)返回结果为:时间段若有交集则取其并集,无交集则返回原时间段,如输入:20160101,20160103;20160102,20160105;20160109,20160110;20160110,20160110; 则返回:20160101,20160105;20160109,20160110; 在这里我将输入的格式定为20160101,20160120格式代表开始和结束日期,并将其封装到Single对象中,对single对象初排序sort;然后再取并集,代码如下:
package calc; import java.io.IOException; import java.util.Collections; import java.util.LinkedList; import java.util.List; public class Merge20170108 { public static void main(String[] args) throws IOException { List<Single> list = new LinkedList<Single>(); Single s4 = new Single(new String[] { "20160302", "20160401" }); Single s = new Single(new String[] { "20160101", "20160201" }); Single s1 = new Single(new String[] { "20160111", "20160121" }); Single s2 = new Single(new String[] { "20160301", "20160401" }); Single s3 = new Single(new String[] { "20160301", "20160321" }); list.add(s4); list.add(s); list.add(s1); list.add(s2); list.add(s3); merge(list); } // 对已经用开始日期start初排序的list进行交集合并处理 public static void merge(List<Single> list) { Collections.sort(list, new Comparator()); for (int i = 0; i < list.size() - 1; i++) { Single outer; Single inner; for (int j = i + 1; j < list.size(); j++) { outer = list.get(i); inner = list.get(j); String start = outer.start; String end = outer.end; String start2 = inner.start; String end2 = inner.end; if (end.compareTo(start2) >= 0 && end.compareTo(end2) <= 0) { outer.end = end2; list.set(i, outer); list.remove(j); j--; } else if (end.compareTo(end2) >= 0 || start.compareTo(end2) == 0) { list.remove(j); j--; } } } for (Single single : list) // 輸出操作 System.out.println(single); } } class Single { String start; String end; public Single(String[] str) { start = str[0]; end = str[1]; } public String toString() { return start + "," + end; } } class Comparator implements java.util.Comparator<Single> { @Override public int compare(Single o1, Single o2) { return o1.start.compareTo(o2.start) > 0 ? 1 : -1; } }
相关文章推荐
- 一个日期时间段有交集求并集的问题
- oracle 根据一个时间段获取这个时间段内所有月份、天数、日期
- 将两个List合并为一个List(并集)+取交集
- 解决Maven打war包同一个jar有不同的日期版本号的问题
- SQL函数:一个日期段日期占另一个时间段日期的比率(使用DateDIFf函数)
- Android实现一个日期处于某个时间段
- 得到一个时间段内连续日期查询(转)
- 一个Oracle的日期插入问题
- 工作当中日期排序的一个问题
- 一个有意思的问题:如何根据一年中的第几周,查询出它周六和周日对应的日期
- Mybatis中的一个关于日期操作的小问题
- 远程桌面连接不到服务器上的一个原因: 系统日期问题。
- 我想问一个关于日期的问题
- Dynamics CRM2013 Odata的filter中含有日期字段时遇到的一个奇葩问题
- 一个 MYSQL 并集 的问题
- 前台一个日期处理问题
- 构建一个类,对集合进行运算,包括求集合的交集,并集和差集。
- 一个日期转换的问题
- Dynamics CRM2013 Odata的filter中含有日期字段时遇到的一个奇葩问题
- Oracle中查询同一个日期字段,格式不同的问题