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

如何统计Multimap中的重复值?附示例数据

统计Multimap中所有值的重复出现次数

没问题,我来帮你搞定这个Multimap的重复值统计需求~首先得明确:我们要统计的是整个Multimap里所有值的重复次数,不管它们属于哪个key对吧?下面给你几种实用的实现思路,覆盖不同场景:

1. 用Guava工具类快速实现(Java场景)

因为Multimap最常见的就是Guava库中的实现,Guava本身就提供了专门的工具类来处理这种频次统计,代码非常简洁:

import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multimap;

public class MultimapDuplicateCounter {
    public static void main(String[] args) {
        // 假设这是你的目标Multimap
        Multimap<String, String> targetMultimap = ...;

        // 一步把所有值转成Multiset,自动完成频次统计
        HashMultiset<String> valueFrequency = HashMultiset.create(targetMultimap.values());

        // 遍历输出每个值的出现次数
        for (String value : valueFrequency.elementSet()) {
            System.out.printf("值「%s」共出现 %d 次%n", value, valueFrequency.count(value));
        }

        // 如果只关心重复出现的(次数>1),可以加个判断
        System.out.println("\n--- 仅重复值统计 ---");
        for (String value : valueFrequency.elementSet()) {
            int count = valueFrequency.count(value);
            if (count > 1) {
                System.out.printf("重复值「%s」:%d 次%n", value, count);
            }
        }
    }
}

2. 手动用HashMap统计(通用语言思路)

如果不想依赖Guava,或者用的是其他语言,核心逻辑都是遍历所有值,用键值对存储「值-出现次数」,这个思路几乎所有语言都适用:

Java版本

import com.google.common.collect.Multimap;
import java.util.HashMap;
import java.util.Map;

public class ManualDuplicateCounter {
    public static void main(String[] args) {
        Multimap<String, String> targetMultimap = ...;
        Map<String, Integer> countMap = new HashMap<>();

        // 遍历Multimap的所有值,更新计数
        for (String value : targetMultimap.values()) {
            countMap.put(value, countMap.getOrDefault(value, 0) + 1);
        }

        // 输出重复值示例
        countMap.entrySet().stream()
                .filter(entry -> entry.getValue() > 1) // 只看重复值
                .forEach(entry -> System.out.printf("重复值「%s」:%d 次%n", entry.getKey(), entry.getValue()));
    }
}

Python版本(模拟Multimap场景)

如果你是用Python字典列表模拟Multimap,代码会更简洁:

# 模拟你的Multimap结构
multimap = {
    "00254": ["00255", "2074E", "2074E", "2074E", "00010", ...],
    "00256": ["00257", "2074E", "00010", "0006", ...]
}

from collections import defaultdict

count_dict = defaultdict(int)

# 遍历所有值统计次数
for values_list in multimap.values():
    for val in values_list:
        count_dict[val] += 1

# 输出重复值
print("--- 重复值统计结果 ---")
for val, cnt in count_dict.items():
    if cnt > 1:
        print(f"「{val}」出现了 {cnt} 次")

小补充:按频次排序

如果需要按出现次数从高到低排序,Java可以用Stream的sorted方法,Python直接对字典项排序即可:

Java排序示例

countMap.entrySet().stream()
        .filter(entry -> entry.getValue() > 1)
        .sorted((e1, e2) -> Integer.compare(e2.getValue(), e1.getValue()))
        .forEach(entry -> System.out.printf("「%s」:%d 次%n", entry.getKey(), entry.getValue()));

Python排序示例

# 按出现次数降序排列
sorted_counts = sorted(count_dict.items(), key=lambda x: x[1], reverse=True)
for val, cnt in sorted_counts:
    if cnt > 1:
        print(f"「{val}」:{cnt} 次")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:19:03