Java TreeMap调用floorEntry报类型不匹配错误该如何解决
错误原因
TreeMap.floorEntry()方法返回的是Map.Entry<Double, BigDecimal>类型的键值对对象,不是你需要的BigDecimal类型值,所以才会触发类型不匹配报错。
你之前调用myMap.get(75)报错,是因为TreeMap中不存在75对应的key,get方法直接返回null,如果后续你直接操作这个null值就会触发空指针异常。
修复方案
你只需要从floorEntry返回的Entry对象中取出value即可,建议同时添加判空逻辑处理传入key小于所有已存key的场景:
TreeMap<Double, BigDecimal> myMap = new TreeMap<>(); // 此处保留你原有给myMap赋值的代码 Double variable = 75.0; BigDecimal rebate; Map.Entry<Double, BigDecimal> floorEntry = myMap.floorEntry(variable); if (floorEntry != null) { rebate = floorEntry.getValue(); } else { // 此处可根据业务需求设置默认值,示例为返回0 rebate = BigDecimal.ZERO; }
如果你能确保传入的key不会小于TreeMap中最小的key(也就是你的场景里不会小于0.00),可以简化为一行代码:
BigDecimal rebate = myMap.floorEntry(75.0).getValue();
额外优化建议
建议你把variable变量显式声明为Double类型,和TreeMap的key类型保持一致,避免int自动转Double的装箱逻辑带来不必要的潜在问题。
内容的提问来源于stack exchange,提问作者brooklynveezy
相关产品推荐
相关产品推荐

