一个日期时间段有交集求并集的问题

来源:互联网 发布:linux centos官网 编辑:程序博客网 时间:2024/05/22 05:00
同学工作中遇到的,问题大概是:输入一系列时间段(开始日期start,结束日期end)返回结果为:时间段若有交集则取其并集,无交集则返回原时间段,如输入:20160101,20160103;20160102,20160105;20160109,20160110;20160110,20160110;则返回:20160101,20160105;20160109,20160110;在这里我将输入的格式定为20160101,20160120格式代表开始和结束日期,并将其封装到Single对象中,对single对象初排序sort;然后再取并集,代码如下:
package jsoup;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;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>();         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));         String input = br.readLine();         while(input != null && ! input.equals("stop")){ // 若输入stop则停止向list中add操作             list.add(new Single(new String[]{input.substring(0, input.indexOf(",")),input.substring(input.indexOf(",")+1)})); //将输入的20160101,20160104格式的字符串保存在Single對象中             input = br.readLine();         }         merge(list);         br.close();    }    //对已经用开始日期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(){ //重写Single对象的toString方法        return start +"," + end;    }}//Single的比较器,比较两个Single对象的开始日期,从而从小到大排序class Comparator implements java.util.Comparator<Single> {    @Override    public int compare(Single o1, Single o2) {        return o1.start.compareTo(o2.start)>0? 1:-1;    }}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃了黑心的苹果怎么办 新生儿两天没拉大便怎么办 贝亲奶瓶不漏怎么办 满月婴儿吃多了怎么办 婴儿吃撑了哭闹怎么办 新生儿吃撑了怎么办啊 新生儿吃了奶粉不吃奶怎么办 新生儿不吃奶也不吃奶粉怎么办 奶瓶吸奶费力不顺畅怎么办 宝宝吃奶粉太勤怎么办 香蕉和地瓜一起吃了怎么办 贝亲奶瓶泡沫多怎么办 四个多月的宝宝拉肚子怎么办 宝宝四个月了拉肚子怎么办 四个月宝宝火大怎么办 刚出生的宝宝便秘怎么办 小宝宝破腹产吸了几口羊水怎么办 换奶粉不拉屎了怎么办 婴儿吃奶粉不拉屎怎么办 1岁半突然不喝奶怎么办 6个月宝宝不吃奶粉怎么办 7个月宝宝不吃奶粉怎么办 5个月宝宝不吃奶粉怎么办 一岁两个月宝宝不长肉怎么办 7个月宝宝肚子疼怎么办 奶喝一半凉了怎么办 5个月孩子厌奶怎么办 怀孕后特别不爱吃水果怎么办 宝宝吃了无比滴怎么办 婴儿上火怎么办吃什么可以去火 肚子胀怎么办最快的方法 40天婴儿拉水怎么办 8个月宝宝坐不稳怎么办 宝宝段奶不吃奶粉怎么办 3个月宝宝头睡偏了怎么办 2个月婴儿抱着睡怎么办 两个半月的宝宝睡眠少怎么办 七个月宝宝不愿意坐怎么办 一个多月的宝宝老是哭闹怎么办 宝宝头老往后仰怎么办 8个月宝宝不会爬怎么办