List<Map<String, Object>>、Map<String, Object>相关比较的工具类

前言

在开发过程中,会遇到很多针对List集合进行处理,比如转换、比较等,接下来就来总结一下。

  • 比较基础数据list和目标list,返回目标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

   /**
     * 根据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数据是否一致

  • 在这里插入代码片
   /**
     * 比对两个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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值