如何迭代Java HashMap并获取对应整数值最大的键 附报错代码示例
错误原因
Collections.max()仅支持接收Collection集合类型的入参,你遍历过程中传入的是单个HashMap.Entry键值对对象,类型不匹配触发编译报错- 你的现有逻辑是遍历每个键值对时都尝试取最大值,不符合「找出整个HashMap中值最大的对应键」的需求,缺少全局对比的过程
实现方法
有两种常用实现方式,按需选择即可:
1. 手动遍历对比(兼容性好,易理解)
先初始化最大分值和对应名称的变量,遍历所有键值对时逐次对比更新,遍历结束后输出结果即可:
int maxScore = Integer.MIN_VALUE; String maxName = ""; for (HashMap.Entry<String, Integer> entry : players.entrySet()) { if (entry.getValue() > maxScore) { maxScore = entry.getValue(); maxName = entry.getKey(); } } System.out.println(maxName);
2. Stream API 简洁写法(Java 8+支持)
直接对entrySet调用max方法,指定按Entry的value值对比,直接拿到值最大的Entry后取键即可:
String maxName = players.entrySet().stream() .max(Comparator.comparingInt(Map.Entry::getValue)) .get() .getKey(); System.out.println(maxName);
完整可运行代码
import java.util.*; public class Program { public static void main(String[] args) { HashMap <String, Integer> players = new HashMap<>(); players.put("Mario", 27); players.put("Luigi", 43); players.put("Jack", 11); // 手动遍历实现 int maxScore = Integer.MIN_VALUE; String maxName = ""; for (HashMap.Entry<String, Integer> entry : players.entrySet()) { if (entry.getValue() > maxScore) { maxScore = entry.getValue(); maxName = entry.getKey(); } } System.out.println(maxName); } }
运行后将直接输出你预期的Luigi结果。
内容的提问来源于stack exchange,提问作者mario mario
相关产品推荐
相关产品推荐

