我有一个抽象类Transaction,在这里我想计算每个Transaction的总价。总价格是通过获取Product中每个Map的价格,然后将该价格乘以每个Product的数量来计算的。我只是不知道如何将这些价格乘以数量,这些数量就是Map中的值。有人可以帮我吗?我几乎尝试了一切,但没有任何效果。

public abstract class Transaction
{
    //Attributes
    ...

    //Links

    Map<Product,Integer> products;

    //Constructor

    Transaction()
    {
        id = newTrId.incrementAndGet();
        date = new Date();
        products = new HashMap<>();
    }

    abstract void addProduct(Product aProduct, int aQuantity);


    BigDecimal calculateTotal()
    {
        BigDecimal total = new BigDecimal(0);

        for(Product eachProduct : products.keySet())
        {
            total.add(eachProduct.getPrice());
        }
        for (Integer eachProduct : products.values())
        {

        }

        return total;
    }
}

最佳答案

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;
}

关于java - 计算总价,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39375279/

10-12 02:48