嵌套For循环中,数据校验处理示例
写在前面
一、代码示例
/**
* 校验重复数据
*
* @param infos 待校验数据集
* @param map 数据库已有数据,封装
* @return List<AbsenceInfo> 返回的错误数据
*/
public List<AbsenceInfo> importCheck(List<AbsenceInfo> infos, Map<String, List<AbsenceInfo>> map) {
List<AbsenceInfo> listsError = Lists.newArrayList();
for (AbsenceInfo info : infos) {
Boolean status = false;
List<AbsenceInfo> absenceInfos = map.get(info.getUserCode());
// 把用户请假记录 时间段内 有交叉的,也就是错误数据放到 List 中
for (AbsenceInfo absenceInfo : absenceInfos) {
LocalDateTime startTime = absenceInfo.getStartTime();
LocalDateTime endTime = absenceInfo.getEndTime();
LocalDateTime startTime1 = info.getStartTime();
if (startTime1.isAfter(startTime) && startTime1.isBefore(endTime)) {
// 这里满足条件时
status = true;
break;
}
}
if (status) {
listsError.add(info);
}
}
return listsError;
}
/**
* 校验重复数据
*
* @param infos 待校验数据集
* @param map 数据库已有数据,封装
* @return List<AbsenceInfo> 返回的错误数据
*/
public List<AbsenceInfo> importCheck(List<AbsenceInfo> infos, Map<String, List<AbsenceInfo>> map) {
List<AbsenceInfo> listsError = Lists.newArrayList();
for (AbsenceInfo info : infos) {
Boolean status = false;
List<AbsenceInfo> absenceInfos = map.get(info.getUserCode());
// 空集时,略过重复校验(标记为待存数据)
if (CollectionUtils.isEmpty(absenceInfos)) {
break;
}
// 把用户请假记录 时间段内 有交叉的,也就是错误数据放到 List 中
for (AbsenceInfo absenceInfo : absenceInfos) {
LocalDateTime startTime = absenceInfo.getStartTime();
LocalDateTime endTime = absenceInfo.getEndTime();
LocalDateTime startTime1 = info.getStartTime();
if (startTime1.isAfter(startTime) && startTime1.isBefore(endTime)) {
// 这里满足条件时
status = true;
break;
}
}
if (status) {
listsError.add(info);
}
}
return listsError;
}