业务需求说明:
页面上有一个表格,用于展示不同时间段的数据。表格的列有开始时间、结束时间和其他列。对于表格内的数据要求如下:
①根据开始时间进行升序排序,在开始时间相同的情况下根据结束时间进行升序排序。
②每一条数据的时间段不可以重复(从开始时间到结束时间)。
③单条数据的结束时间不可以在开始时间之前。
时间为String类型。
代码如下:
/**
*
* 实体类 Time
*
*/
public class Time {
private String startDate;
private String endDate;
private String other;
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public String getOther() {
return other;
}
public void setOther(String other) {
this.other = other;
}
}
public class TimeTable {
/**
* 检查列表数据并排序
*
* @param list
* @return
*/
public List<Time> checkTime(List<Time> list){
// 判断列表长度
if ( list.size()> 1 ) {
//自定义排序规则
Comparator<Time> comparator = (uts1, uts2) -> {
if ( uts1.getStartDate() == uts2.getStartDate() &&
uts1.getEndDate() == uts2.getEndDate() ){
return 0;
}else{
if ( uts1.getStartDate() != uts2.getStartDate() ){
return uts1.getStartDate().compareTo(uts2.getStartDate());
}else{
return uts1.getEndDate().compareTo(uts2.getEndDate());
}
}
};
list.sort(comparator);
// 检查是否有任何不合理的或者重复的数据在list列表
for (int i = 0; i < list.size(); i++) {
Time utsInfo = list.get(i);
// 判断开始时间是否大于结束时间
if ( utsInfo.getStartDate().compareTo(utsInfo.getEndDate()) > 0 ) {
//...抛异常或打印日志
}
int j = i + 1;
if ( j < list.size() ) {
Time utsInfo2 = list.get(j);
// 检查两个周期之间是否有重叠
if ( utsInfo2.getStartDate().compareTo(utsInfo.getEndDate()) <= 0 ) {
//...抛异常或打印日志
}
// 检查是否有重复的时间段
if ( comparator.compare(utsInfo,utsInfo2) == 0) {
//...抛异常或打印日志
}
}
}
}
return list;
}
}