时间合并算法

需求:任意几段时间,比如 9:00-10:00,11:00-12:00,9:30-11:30,自动输出9:00-12:00;比如 9:00-10:00,11:00-12:00,9:30-10:30,自动输出 9:00-10:30,11:00-12:00

//贴出核心部分代码,供大家参考
static  <T> T  combineDate(List<TimeType> list) {
		Stack<Long> s = new Stack<Long>();
		Stack<Long> e = new Stack<Long>();
        Collections.sort(list, new TimeComparator());
		s.push(0L);
		e.push(0L);
		for (TimeType time : list) {
			if (time.getStartTime().getTime() > e.peek()) {
				s.push(time.getStartTime().getTime());
				e.push(time.getEndTime().getTime());
			} else if (time.getEndTime().getTime() >= e.peek()) {
				e.pop();
				e.push(time.getEndTime().getTime());
			} else if (time.getStartTime().getTime() <= s.peek()) {
				s.pop();
				s.push(time.getStartTime().getTime());
			}
		}
		List<TimeType> tt = new ArrayList<TimeType>();
		while (!s.isEmpty()) {
			if (0 != s.peek() && 0 != e.peek() && (0 != (int)(e.peek() - s.peek()))) {
				tt.add(new TimeType(new Date(s.peek()), new Date(e.peek())));
			}
			s.pop();
			e.pop();
		}
		return (T) tt;
	}
public class Test {
	public static void main(String[] args) throws ParseException {
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		TimeType t1 = new TimeType(sdf.parse("2000-1-1 0:0:0"),sdf.parse("2000-1-2 12:30:0"));
		TimeType t2 = new TimeType(sdf.parse("2000-1-2 12:0:0"),sdf.parse("2000-1-3 12:0:0"));
		TimeType t3 = new TimeType(sdf.parse("2000-1-3 11:0:0"),sdf.parse("2000-1-4 12:0:0"));
		TimeType t4 = new TimeType(sdf.parse("2000-1-4 11:0:0"),sdf.parse("2000-1-7 12:0:0"));

		List<TimeType> list = new ArrayList<TimeType>();
		list.add(t1);
		list.add(t2);
		list.add(t3);
		list.add(t4);
		
		System.out.println(CombineAction.combineDate(list));
	}
}

大家扫码关注一下公众号 智程科技 回复 “时间合并” 即可免费领取所有源码哦

猜你喜欢

转载自blog.csdn.net/weixin_38316944/article/details/114545799