导航地图:BigDecimal 或 NextKey 上的lowerKey() 方法?

问题描述

假设我有一个逆序(降序)的树形图

TreeMap <BigDecimal,Integer> m = new TreeMap <>(Comparator.reverSEOrder);

假设我有密钥(在 BigDecimal 中)

(100.00,75.50,50.50)

如果我调用方法(带有大十进制参数)

m.lowerKey(100.00)

它将输出空值。我想这与 BigDecimals 的比较有关,但是我怎么能让它输出 75.50 呢?或者更简单地说,是否有可能在给定当前键的情况下获得下一个键,因为它是有序的?

一种可能的解决方案是使用 Double 作为键。但是我正在处理金钱和它们之间的转换听起来有点乏味。(另外我在做一些算术所以 double 容易出错)

注意:没有 lambdas / 函数式构造和外部库!

解决方法

我怎样才能让它输出 75.50?

您将 TreeMap 定义为使用反向比较器,因此 100.00 低于 75.50。这意味着您需要在此处使用 higherKey()

给定当前密钥是否有可能获得下一个密钥,因为它是有序的?

是的,但您需要注意顺序。如果您提供了一个比较器,这将定义排序以及 TreeMap 认为较低或较高的内容。另请注意,比较器对重复检测也有影响,即任何因比较器而相等的键都将与 TreeMap 重复。