首页 > 解决方案 > 使用 java 流计算

问题描述

我有一个列表,想编写一个基于流的代码来查找平均价格。

  1. 输入参数是带有数量和价格字段的 PT 类列表。

输入:

[PT(qty=300, price=57.8),           
PT(qty=200, price=57.5),        
PT(qty=240, price=57.2)]       

输出:

Price = (300 x 57.86 +200 x 57.5 + 240 x 57.28) / 740 = 57.57

PT类:

class PT{       
   BigDecimal price;      
   BigDecimal qty;  
}

我有点困惑如何编写一个产生上述输出的函数。如果有人可以发出一些光,那将是一个很大的帮助。谢谢

标签: javajava-8java-stream

解决方案


由于您的课程中有 2 个参数,因此您不能使用经典的BigDecimal summary statistics

您可以使用循环:

List<PT> list = new ArrayList<>() {{
    add(new PT(57.8, 300));
    add(new PT(57.5, 200));
    add(new PT(57.2, 240));
}};

BigDecimal sum = BigDecimal.ZERO, product = BigDecimal.ZERO;
for (PT p : list) {
    sum = sum.add(p.getQty());
    product = product.add(p.getQty().multiply(p.getPrice()));
}
double result = product.divide(sum, RoundingMode.CEILING).doubleValue();
System.out.println(result);

如果您的值不是那么大,并且可以容纳 double max 1.7976931348623157e+308,那么使用它会花费更少


推荐阅读