我有一个抽象类37.00
,我想计算每个Transaction
的总价。总价格的计算方法是,在Transaction
中获取每个Product
的价格,然后将该价格乘以每个Map
的数量。我只是不知道如何将这些价格乘以Product
中的数量。有人可以帮帮我吗?我几乎尝试了一切,没有任何作用。
Map
答案 0 :(得分:1)
BigDecimal
是不可变的,add
不会更改调用它的对象。因此,您需要重新分配add
:
BigDecimal calculateTotal() {
BigDecimal total = new BigDecimal(0);
for (Map.Entry<Product, Integer> entry : products.entrySet()) {
total = total.add(BigDecimal.valueOf(entry.getKey().getPrice() * entry.getValue()));
}
return total;
}
答案 1 :(得分:0)
我只是不知道如何将这些价格乘以数量 作为
Map
中的值。有人可以帮帮我吗?
可以通过迭代Map
的条目来完成,以便将数量(Map
的值)乘以其价格,如下所示:
BigDecimal calculateTotal() {
BigDecimal total = new BigDecimal(0);
for (Map.Entry<Product, Integer> entry : products.entrySet()) {
total = total.add(
BigDecimal.valueOf(entry.getKey().getPrice()).multiply(
BigDecimal.valueOf(entry.getValue())
)
);
}
return total;
}
注意:我认为Product#getPrice()
会返回double
。
NB 2 由于BigDecimal
不可变,您需要在每次迭代时重新分配变量total
。
NB 3 为避免计算失去任何精确度,您需要将所有内容转换为BigDecimal
。
答案 2 :(得分:0)
你很亲密。请看一下:
BigDecimal calculateTotal()
{
BigDecimal total = new BigDecimal(0);
for(Product eachProduct : products.keySet())
{
total.add(eachProduct.getPrice() * products.get(eachProduct));
}
return total;
}
唯一的区别是这一行:total.add(eachProduct.getPrice() * products.get(eachProduct));
我添加此内容以从与Integer
关联的地图中抓取Product
。
如果使用Java 8,您也可以执行流式处理。
total = new BigDecimal(map.keySet()
.stream().mapToDouble( product -> product.getPrice() * products.get(product) )
.sum());