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

如何找出ArrayList<HashMap<String, String>>中的重复DATA_ID并提取计算?

解决ArrayList<HashMap<String, String>>中重复DATA_ID的提取与VALUE计算问题

步骤1:统计DATA_ID的出现频率

先遍历列表,统计每个DATA_ID的出现次数,快速定位重复ID:

ArrayList<HashMap<String, String>> listMap = // 你的数据源
HashMap<String, Integer> countMap = new HashMap<>();

for (HashMap<String, String> map : listMap) {
    String dataId = map.get("DATA_ID");
    countMap.put(dataId, countMap.getOrDefault(dataId, 0) + 1);
}

步骤2:筛选重复的DATA_ID

从统计结果中提取出现次数>1的DATA_ID:

Set<String> duplicateIds = new HashSet<>();
for (Map.Entry<String, Integer> entry : countMap.entrySet()) {
    if (entry.getValue() > 1) {
        duplicateIds.add(entry.getKey());
    }
}

步骤3:提取重复ID对应的元素

遍历原列表,将重复DATA_ID的元素按ID分组,方便后续计算:

Map<String, List<HashMap<String, String>>> groupedDuplicates = new HashMap<>();
for (HashMap<String, String> map : listMap) {
    String dataId = map.get("DATA_ID");
    if (duplicateIds.contains(dataId)) {
        groupedDuplicates.computeIfAbsent(dataId, k -> new ArrayList<>()).add(map);
    }
}

步骤4:对VALUE进行计算

以求和为例,将每个元素的VALUE转为数值后计算(可根据需求替换为平均、最大/最小值等):

Map<String, Double> valueSumMap = new HashMap<>();
for (Map.Entry<String, List<HashMap<String, String>>> entry : groupedDuplicates.entrySet()) {
    String dataId = entry.getKey();
    List<HashMap<String, String>> duplicates = entry.getValue();
    
    double sum = 0.0;
    for (HashMap<String, String> map : duplicates) {
        // 处理可能的格式异常
        try {
            double value = Double.parseDouble(map.get("VALUE"));
            sum += value;
        } catch (NumberFormatException e) {
            System.err.println("DATA_ID " + dataId + " 存在无效VALUE格式");
        }
    }
    valueSumMap.put(dataId, sum);
}

// 示例输出:DATA_ID=01的VALUE总和
System.out.println("DATA_ID=01的VALUE总和:" + valueSumMap.get("01"));

Java 8+ Stream简化写法

用Stream API可以大幅简化代码,同时实现相同逻辑:

// 分组并过滤出重复ID的元素集合
Map<String, List<HashMap<String, String>>> groupedDuplicates = listMap.stream()
    .collect(Collectors.groupingBy(map -> map.get("DATA_ID")))
    .entrySet().stream()
    .filter(entry -> entry.getValue().size() > 1)
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

// 计算每个重复ID的VALUE总和
Map<String, Double> valueSumMap = groupedDuplicates.entrySet().stream()
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        entry -> entry.getValue().stream()
            .map(map -> Double.parseDouble(map.get("VALUE")))
            .reduce(0.0, Double::sum)
    ));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:05:07