使用java流进行计算
我有一个列表,想写一个基于流的代码来找到平均价格 输入参数是带有数量和价格字段的PT类列表。 输入:使用java流进行计算,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个列表,想写一个基于流的代码来找到平均价格 输入参数是带有数量和价格字段的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{ Big
[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;
}
我有点困惑如何编写一个函数来产生上述输出。
如果有人能提供一些线索,那将是一个很大的帮助。谢谢因为类中有两个参数,所以不能使用经典 您可以使用循环:
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中,使用它会降低成本您不能在单向流中手动执行此操作,因为您无法以一种方式管理产品和总金额,请使用给定的重复链接,或者usr a对于每个循环,这里有一个答案,并有详细的解释:@Naman我认为你的dupe target不足以进行OP,因为他们需要使用加权平均。转换为使用BigDecimal而不是double/long可能更容易。@azro您实际上可以使用自定义收集器在单向流中进行转换。