写在前面
这里有两个集合,待校验的List集合,和参照数据集Map,从List集合中筛选出,符合Map某一条件的数据集
一、代码示例
/** * 校验重复数据 * * @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;
}