比对两个List

 /**
     * 比较基础数据list和目标list,返回目标list中没有的数据和不一致的数据
     *
     * @param basicList  基础数据list
     * @param targetList 目标list
     * @param index      主键
     * @return
     */
    public static Map<String, List<Map<String, Object>>> checkDiffList(List<Map<String, Object>> basicList, List<Map<String, Object>> targetList, String... index) {
        Map<String, Map<String, Object>> basicMap = checkListToMap(basicList, index);
        Map<String, Map<String, Object>> targetMap = checkListToMap(targetList, index);
        Map<String, List<Map<String, Object>>> result = new HashMap<>();
        List<Map<String, Object>> insertList = Lists.newArrayList();
        List<Map<String, Object>> updateList = Lists.newArrayList();
        basicMap.forEach((k, v) -> {
            Map<String, Object> tblData = targetMap.get(k);
            if (tblData == null) {
                insertList.add(v);
            } else {
                if (checkDiffMap(v, tblData)) {
                    updateList.add(v);
                }
            }
        });
        result.put("insertList", insertList);
        result.put("updateList", updateList);
        return result;
    }


 /**
     * 根据index数组返回比对数据Map
     *
     * @param list
     * @param index
     * @return
     */
    private static Map<String, Map<String, Object>> checkListToMap(List<Map<String, Object>> list, String... index) {
        return list.stream().collect(Collectors.toMap(e -> {
            StringBuilder key = new StringBuilder();
            for (String item : index) {
                key.append(Optional.ofNullable(e.get(item)).orElse("")).append("_");
            }
            return key.toString();
        }, e -> e, (k1, k2) -> k1));
    }

/**
     * 比对两个map 如果数据不一致 则返回true
     *
     * @param source 基础数据list
     * @param target 目标list
     * @return 是否一致
     */
    public static Boolean checkDiffMap(Map<String, Object> source, Map<String, Object> target) {
        source = new TreeMap<>(source);
        target = new TreeMap<>(target);
        String sourceStr = JsonUtils.toStr(source);
        String targetStr = JsonUtils.toStr(target);
        return !(StringUtils.compare(sourceStr, targetStr) == 0);
    }
posted @ 2021-09-14 10:46  小白白白白白白白白白  阅读(400)  评论(0编辑  收藏  举报