如何统计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
相关产品推荐
相关产品推荐

