java - 使用 java 流计算
问题描述
我有一个列表,想编写一个基于流的代码来查找平均价格。
- 输入参数是带有数量和价格字段的 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;
}
我有点困惑如何编写一个产生上述输出的函数。如果有人可以发出一些光,那将是一个很大的帮助。谢谢
解决方案
由于您的课程中有 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
,那么使用它会花费更少
推荐阅读
- python - 如何自动化标签
- julia - 如何使用 JuMP 0.19 更改下限
- javascript - 如何使用css或javascript从div中删除url
- reactjs - 如何在 src 文件夹之外要求具有反应电子的图像(应用程序支持)
- python-3.x - 填写每个组的缺失日期并在 Pandas 中估算空值
- python - 如何在笛卡尔坐标中使用 RANSAC 拟合线?
- c# - 在基本添加语句后保存更改调用超时的问题
- javascript - 更改后 ReactJs 状态不更新
- python - 无法在机器人框架中添加 httplibrary
- ios - UIView 不会出现在模拟器中