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

如何检查Dictionary<String, Integer>中的值是否唯一及处理重复?

检查Map值是否唯一并返回重复统计

嘿,这个需求我之前做业务逻辑的时候正好碰到过!要检查Java里Map<String, Integer>(你说的Dictionary其实就是Java的Map啦)的所有值是否唯一,还要返回重复值的出现次数或者0,其实用Java自带的集合工具就能轻松搞定,我给你分享下我的实现思路和代码:

实现思路

  • 统计值出现次数:用一个辅助的HashMap<Integer, Integer>来记录原Map中每个Integer值的出现次数。
  • 筛选重复条目:从统计结果里过滤出出现次数大于1的条目,这些就是我们要找的重复值。
  • 返回对应结果:如果没有重复值,返回0;如果存在重复,返回重复值与其出现次数的映射。

完整代码示例

import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class MapValueUniquenessChecker {
    // 核心方法:检查Map值的唯一性并返回结果
    public static Object checkUniqueValues(Map<String, Integer> inputMap) {
        // 1. 统计每个值的出现次数
        Map<Integer, Integer> valueCountMap = new HashMap<>();
        for (Integer value : inputMap.values()) {
            // 用getOrDefault简化统计逻辑,不存在则默认次数为0
            valueCountMap.put(value, valueCountMap.getOrDefault(value, 0) + 1);
        }

        // 2. 过滤出出现次数>1的重复值
        Map<Integer, Integer> duplicateValues = valueCountMap.entrySet()
                .stream()
                .filter(entry -> entry.getValue() > 1)
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

        // 3. 根据情况返回结果
        if (duplicateValues.isEmpty()) {
            return 0;
        } else {
            return duplicateValues;
        }
    }

    // 测试用例
    public static void main(String[] args) {
        // 测试存在重复值的场景
        Map<String, Integer> mapWithDuplicates = new HashMap<>();
        mapWithDuplicates.put("apple", 5);
        mapWithDuplicates.put("banana", 3);
        mapWithDuplicates.put("cherry", 5);
        mapWithDuplicates.put("date", 3);
        mapWithDuplicates.put("elderberry", 7);
        System.out.println(checkUniqueValues(mapWithDuplicates)); // 输出 {5=2, 3=2}

        // 测试无重复值的场景
        Map<String, Integer> mapWithoutDuplicates = new HashMap<>();
        mapWithoutDuplicates.put("cat", 10);
        mapWithoutDuplicates.put("dog", 20);
        mapWithoutDuplicates.put("bird", 30);
        System.out.println(checkUniqueValues(mapWithoutDuplicates)); // 输出 0
    }
}

代码细节解释

  • 统计次数时用getOrDefault方法,省去了判断key是否存在的冗余代码,直接给默认值0,每次遍历就把对应值的次数加1。
  • 用Stream API来过滤和收集重复值,代码更简洁易读;如果你习惯用传统for循环,也可以手动遍历valueCountMap的entrySet,筛选出次数大于1的条目。
  • 返回值用Object是为了兼容两种返回情况(整数0或Map),如果追求类型严谨性,你可以自定义一个返回类,或者统一返回Map(无重复时返回空Map,调用方再判断是否为空并输出0)。

额外优化建议

  • 如果你的Map可能包含null值,这段代码也能正常处理——因为HashMap允许null作为key,多个null会被统计为重复值。
  • 要是需要返回更友好的字符串格式(比如“重复值5出现了2次,重复值3出现了2次”),可以修改返回逻辑:
if (duplicateValues.isEmpty()) {
    return 0;
} else {
    StringBuilder resultBuilder = new StringBuilder();
    for (Map.Entry<Integer, Integer> entry : duplicateValues.entrySet()) {
        resultBuilder.append("重复值").append(entry.getKey())
                     .append("出现了").append(entry.getValue()).append("次,");
    }
    // 移除最后多余的逗号
    return resultBuilder.deleteCharAt(resultBuilder.length() - 1).toString();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:38:13