鉴于{Price, Quantity}
对的集合,我需要以相同的价格汇总所有数量。实现它的最简单方法是什么?
肮脏的,将使用Hashmap
实施解决方案,其中键是价格和价值是聚合数量。但是,据我所知,Float
不是Hashmap
的安全密钥。所以这个解决方案容易出错。
什么是解决此问题的推荐替代方案?
答案 0 :(得分:8)
您可以使用BigDecimal作为键。这将是哈希码安全。
您必须初始化值,使它们具有相同的比例,例如:
BigDecimal key = new BigDecimal(Double.toString(price)).setScale(2);
答案 1 :(得分:0)
如果所有价格都有固定的十进制大小(例如2位数),您只需使用Long
(以美分为单位)作为地图关键字。
使用BigDecimal
是一个糟糕的选择,因为它可能导致罕见且难以发现的错误 - 只有两个BigDecimal
具有相同的值并且相同时才相等精度(因此2.0
不等于2.00
也不2
- 所有三个都将成为地图中的不同键。)