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

写在前面

这里有两个集合,待校验的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;
    }