Java如何找出Map中出现次数最多的键并输出
Java 从字符统计Map中获取出现次数最高的键的实现
方式1:遍历Entry实现(兼容所有Java版本)
直接遍历Map的所有键值对,记录最大值对应的键即可:
// 你已经统计好的字符次数Map Map<Character, Integer> countMap = ...; Character maxKey = null; int maxCount = -1; // 遍历所有键值对 for (Map.Entry<Character, Integer> entry : countMap.entrySet()) { // 遇到更大的计数值就更新记录 if (entry.getValue() > maxCount) { maxCount = entry.getValue(); maxKey = entry.getKey(); } } // 输出结果,示例中得到c System.out.println(maxKey);
方式2:Java 8+ Stream流式实现
如果使用Java 8及以上版本,可以用Stream的max方法快速获取最大值对应的Entry,再取键即可:
Character maxKey = countMap.entrySet() .stream() // 按值比较取最大的Entry .max(Map.Entry.comparingByValue()) // 空Map可自定义返回逻辑,比如orElse(null) .orElseThrow() .getKey();
完整测试代码
对应你给出的示例的完整运行代码:
import java.util.HashMap; import java.util.Map; public class MaxCountCharDemo { public static void main(String[] args) { // 模拟你已经生成好的统计Map Map<Character, Integer> countMap = new HashMap<>(); countMap.put('a', 3); countMap.put('b', 4); countMap.put('c', 11); countMap.put('d', 5); countMap.put('e', 4); Character maxKey = null; int maxCount = -1; for (Map.Entry<Character, Integer> entry : countMap.entrySet()) { if (entry.getValue() > maxCount) { maxCount = entry.getValue(); maxKey = entry.getKey(); } } System.out.println(maxKey); // 输出c } }
注意事项
- 如果Map为空,直接调用get()会抛出异常,建议根据业务场景使用
orElse(默认值)或者orElseThrow(自定义异常)处理 - 如果存在多个字符的出现次数同为最高值,以上写法会返回第一个遍历到的对应键,若需要返回所有最高值的键,可以额外定义集合存储所有值等于maxCount的键即可
内容的提问来源于stack exchange,提问作者HMNNikoloz
相关产品推荐
相关产品推荐

