创建自定义类
import lombok.Data;
import java.time.DateTimeException;
/**
* @author Amid
*/
@Data
public class TimeCompar {
private Long start;
private Long end;
public TimeCompar(Long start , Long end){
if(end.compareTo(start) < 0){
//抛异常
throw new DateTimeException("结束时间不能小于开始时间");
}
this.start = start;
this.end = end;
}
}
测试类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author Amid
*/
public class Demo {
public static void main(String[] args) throws ParseException {
List<String> list = new ArrayList<>();
list.add("beginTime:2020-01-01 00:04:00,endTime:2020-01-01 00:06:00");
list.add("beginTime:2020-01-01 00:01:05,endTime:2020-01-01 00:03:15");
list.add("beginTime:2020-01-01 00:09:00,endTime:2020-01-01 00:10:00");
list.add("beginTime:2020-01-01 00:05:00,endTime:2020-01-01 00:08:00");
List<TimeCompar> timePairList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
//拿到一个时间串
String str = list.get(i);
//先用 , 切割开
String[] startAndEnd = str.split(",");
//现在分别得到了开始时间和结束时间字符串,将具体时间截取出来
//首先要知道:所在的位置,然后将:后的字符串截取出来
int indexStart = startAndEnd[0].indexOf("2");
String start = startAndEnd[0].substring(indexStart);
int indexEnd = startAndEnd[1].indexOf("2");
String end = startAndEnd[1].substring(indexEnd);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = simpleDateFormat.parse(start);
Date endDate = simpleDateFormat.parse(end);
TimeCompar timeCompar = new TimeCompar(startDate.getTime(),endDate.getTime());
timePairList.add(timeCompar);
}
//这样结束后timePairList中存的就是所有的起始时间对象,如果这个List为null或者无参数
//调用list集合的sort方法,给定排序规则进行排序
/* Comparator.comparingLong方法接受一个函数作为参数,该参数从类型T中提取一个长排序键,
* 然后返回一个与该排序键进行比较的Comparator。指定的函数也可以序列化。
*/
timePairList.sort(Comparator.comparingLong(TimeCompar::getStart));
//排好序之后遍历比较,如果后一个的开始时间小于前一个的结束时间就说明有交集,将交集时间段打印
for (int i = 1; i < timePairList.size(); i++) {
Long nextStart = timePairList.get(i).getStart();
Long lastEnd = timePairList.get(i - 1).getEnd();
if(lastEnd > nextStart){
//说明有交集,打印交集时间段,为下一个的开始---前一个的结束
System.out.println("beginTime:" +
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").
format(new Date(nextStart)) +
",endTime:" +
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").
format(new Date(lastEnd)));
}
}
}
}