导航地图:BigDecimal 或 NextKey 上的 lowerKey() 方法?
Navigable Maps: lowerKey() method on BigDecimal or NextKey?
假设我有一个倒序的树图(降序)
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/函数结构和外部库!
how could I make it to output 75.50 instead?
您将 TreeMap 定义为使用反向比较器,因此 100.00 低于 75.50。这意味着您需要在此处使用 higherKey()
。
Is it possible to get the next key given the current key, since it is ordered?
是的,但您需要注意顺序。如果您提供了比较器,这将定义排序以及 TreeMap 认为较低或较高的内容。另请注意,比较器也会对重复检测产生影响,即任何由于比较器而相等的键都将与 TreeMap 重复。
假设我有一个倒序的树图(降序)
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/函数结构和外部库!
how could I make it to output 75.50 instead?
您将 TreeMap 定义为使用反向比较器,因此 100.00 低于 75.50。这意味着您需要在此处使用 higherKey()
。
Is it possible to get the next key given the current key, since it is ordered?
是的,但您需要注意顺序。如果您提供了比较器,这将定义排序以及 TreeMap 认为较低或较高的内容。另请注意,比较器也会对重复检测产生影响,即任何由于比较器而相等的键都将与 TreeMap 重复。