天天看点

嵌套For循环中,数据校验处理示例

嵌套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;
    }