如何根据时间条件判断异常时间数据
一个LIST内 存在一组数据
每一个对象存在一段时间数据:即开始时间 与结束时间
每个对象如果存在 时间冲突 即为异常数据
例: 1.开始时间:9:00 结束时间9.30
2.开始时间:10:00 结束时间10.30
3.开始时间:11:00 结束时间11.30
4.开始时间:9:20 结束时间9.30 异常数据(开始时间,存在于1的时间段内)
5.开始时间:9:20 结束时间9.31 异常数据(开始时间,存在于1的时间段内)
6.开始时间:9:50 结束时间10.20 异常数据(结束时间,存在于2的时间段内)
目前写法:使用流根据比较所有元素开始时间进行排序
排序后两层for 循环对比
有没有更好地写法
UserVo userVo1 = new UserVo("zhangsan","1",
LocalDateTime.parse("2023-05-15 09:10", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")),
LocalDateTime.parse("2023-05-15 09:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
UserVo userVo2 = new UserVo("lisi","2222",
LocalDateTime.parse("2023-05-15 10:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")),
LocalDateTime.parse("2023-05-15 10:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
UserVo userVo3 = new UserVo("wangwu","3333",
LocalDateTime.parse("2023-05-15 11:10", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")),
LocalDateTime.parse("2023-05-15 12:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
/**设置异常时间 异常1: 开始时间 > userVo1的结束时间*/
UserVo userVo4 = new UserVo("zhaoliu","4444",
LocalDateTime.parse("2023-05-15 09:20", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")),
LocalDateTime.parse("2023-05-15 09:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
/**设置异常时间 异常2: 开始时间>userVo1的结束时间*/
UserVo userVo5 = new UserVo("zhaoliu","4444",
LocalDateTime.parse("2023-05-15 09:20", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")),
LocalDateTime.parse("2023-05-15 09:31", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
/**设置异常时间 异常3: 开始时间<userVo1的结束时间 但 结束时间 大于userVo2 开始时间*/
UserVo userVo6 = new UserVo("zhaoliu","4444",
LocalDateTime.parse("2023-05-15 09:50", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")),
LocalDateTime.parse("2023-05-15 10:20", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
List<UserVo> userVos = Arrays.asList(userVo1, userVo2, userVo3, userVo4,userVo5,userVo6);
List<UserVo> collect = userVos.stream()
.sorted((var1, var2) -> var1.getStartTime().compareTo(var2.getStartTime())).collect(Collectors.toList());
参考GPT和自己的思路:针对你所提出的问题,目前你的做法已经是比较常用且简单的做法了,即通过流对起始时间进行排序,然后逐个比较是否存在时间重叠。
但如果你希望能够更高效地判断异常时间数据,你可以考虑使用线段树这种数据结构来解决。线段树能够对一个范围内的数值进行查询、区间修改等操作,因此可以方便地用于解决时间重叠问题。你可以将每个时间段抽象成一条线段,然后将这些线段插入到线段树中,最后通过线段树来查询是否存在时间重叠的情况。
不过线段树需要比较复杂的实现,适用范围也具有较大的限制,因此具体是否使用线段树还需要根据具体情况来判断。
是否可以考虑使用时间戳,使用时间戳计算是不是更方便.