You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中基于ID关联JsonObject列表并统计计数差值分类

基于ID关联两个JsonObject列表并分类计数差值

需求说明

从两个数据库分别获取包含表信息的JsonObject列表,以ID_COL为关联键,计算DB2_COUNT - DB1_COUNT的差值DIFF_COUNT:

  • 差值为0的记录归入success列表
  • 差值不为0的记录归入reject列表

实现思路

  1. 将其中一个列表(如result2)转换为以ID_COL为键的Map,实现O(1)时间复杂度的快速查找,避免双重遍历的低效问题
  2. 遍历另一个列表(如result1),通过ID_COL从Map中匹配对应的记录
  3. 提取两个记录的计数字段,转换为数值类型后计算差值
  4. 合并两个记录的字段并添加DIFF_COUNT,根据差值结果分类到对应列表

示例代码(Java)

import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TableCountComparator {
    public static void main(String[] args) {
        // 模拟从数据库获取的结果集
        List<JSONObject> result1 = new ArrayList<>();
        result1.add(new JSONObject("{\"ID_COL\":\"Table1\",\"DB1_TABLE_NAME\":\"Table1\",\"DB1_COUNT\":\"10\"}"));
        result1.add(new JSONObject("{\"ID_COL\":\"Table2\",\"DB1_TABLE_NAME\":\"Table2\",\"DB1_COUNT\":\"20\"}"));

        List<JSONObject> result2 = new ArrayList<>();
        result2.add(new JSONObject("{\"ID_COL\":\"Table1\",\"DB2_TABLE_NAME\":\"Table1\",\"DB2_COUNT\":\"10\"}"));
        result2.add(new JSONObject("{\"ID_COL\":\"Table2\",\"DB2_TABLE_NAME\":\"Table2\",\"DB2_COUNT\":\"40\"}"));

        // 将result2转为ID映射,加速匹配
        Map<String, JSONObject> result2IdMap = new HashMap<>();
        for (JSONObject tableObj : result2) {
            String tableId = tableObj.getString("ID_COL");
            result2IdMap.put(tableId, tableObj);
        }

        // 初始化结果列表
        List<JSONObject> successList = new ArrayList<>();
        List<JSONObject> rejectList = new ArrayList<>();

        // 遍历result1,关联计算差值并分类
        for (JSONObject db1Table : result1) {
            String tableId = db1Table.getString("ID_COL");
            JSONObject db2Table = result2IdMap.get(tableId);

            if (db2Table != null) {
                // 转换计数字段为整数
                int db1Count = Integer.parseInt(db1Table.getString("DB1_COUNT"));
                int db2Count = Integer.parseInt(db2Table.getString("DB2_COUNT"));
                int diff = db2Count - db1Count;

                // 合并生成结果对象
                JSONObject resultObj = new JSONObject();
                resultObj.put("ID_COL", tableId);
                resultObj.put("DB1_TABLE_NAME", db1Table.getString("DB1_TABLE_NAME"));
                resultObj.put("DB2_TABLE_NAME", db2Table.getString("DB2_TABLE_NAME"));
                resultObj.put("DIFF_COUNT", diff);

                // 分类添加到对应列表
                if (diff == 0) {
                    successList.add(resultObj);
                } else {
                    rejectList.add(resultObj);
                }
            }
            // 可根据需求处理ID不匹配的情况,例如加入reject或记录日志
        }

        // 输出结果
        System.out.println("success = " + successList);
        System.out.println("reject = " + rejectList);
    }
}

关键注意点

  • 性能优化:使用Map做索引将时间复杂度从O(n²)降低到O(n),适合处理大规模数据
  • 类型转换:计数字段为字符串类型,必须转换为数值类型后才能进行差值计算
  • 异常处理:实际场景中建议添加类型转换异常捕获,以及ID不匹配的处理逻辑(如记录缺失表信息)

内容的提问来源于stack exchange,提问作者Sucheta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:30:50