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

如何将Java Map中重复值与唯一值的键值对拆分到不同Map?

解决方案:将Java Map按值的重复情况拆分到两个Map

要实现这个需求,核心思路是先统计每个值在原Map中的出现次数,再根据次数判断键值对该进入“重复值Map”还是“唯一值Map”。下面是具体的实现步骤和代码:

步骤分解

  1. 统计值的出现频率:用一个辅助Map记录每个Double值对应的出现次数。
  2. 遍历原Map分类存储:
    • 若值的出现次数≥2,将键值对存入存放重复项的Map
    • 若值的出现次数=1,将键值对存入存放唯一项的Map

完整代码示例

import java.util.HashMap;
import java.util.Map;

public class MapSplitByValue {
    public static void main(String[] args) {
        // 初始化原Map
        Map<String, Double> originalMap = new HashMap<>();
        originalMap.put("First", 123.12345);
        originalMap.put("Second", 234.3456);
        originalMap.put("Third", 576.9876);
        originalMap.put("Fourth", 123.12345);
        originalMap.put("Fifth", 234.3456);
        originalMap.put("Sixth", 999.8888);
        originalMap.put("Seventh", 677.4578);

        // 1. 统计每个值的出现次数
        Map<Double, Integer> valueCountMap = new HashMap<>();
        for (Double value : originalMap.values()) {
            valueCountMap.put(value, valueCountMap.getOrDefault(value, 0) + 1);
        }

        // 2. 初始化两个结果Map
        Map<String, Double> duplicateValuesMap = new HashMap<>();
        Map<String, Double> uniqueValuesMap = new HashMap<>();

        // 3. 遍历原Map进行分类
        for (Map.Entry<String, Double> entry : originalMap.entrySet()) {
            String key = entry.getKey();
            Double value = entry.getValue();
            int count = valueCountMap.get(value);
            if (count >= 2) {
                duplicateValuesMap.put(key, value);
            } else {
                uniqueValuesMap.put(key, value);
            }
        }

        // 打印结果验证
        System.out.println("重复值的键值对:");
        duplicateValuesMap.forEach((k, v) -> System.out.println(k + ": " + v));

        System.out.println("\n唯一值的键值对:");
        uniqueValuesMap.forEach((k, v) -> System.out.println(k + ": " + v));
    }
}

运行结果

重复值的键值对:
First: 123.12345
Fourth: 123.12345
Second: 234.3456
Fifth: 234.3456

唯一值的键值对:
Third: 576.9876
Sixth: 999.8888
Seventh: 677.4578

注意事项

  • 浮点数精度问题:如果业务场景需要精确比较数值,建议用BigDecimal代替Double,避免因浮点数精度误差导致的错误判断(比如0.1 + 0.2不等于0.3的情况)。
  • Map顺序控制:示例用了HashMap,如果需要保留原Map的插入顺序,可以替换为LinkedHashMap。

内容的提问来源于stack exchange,提问作者Venkata Ramana Murthy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:31:44