【发布时间】:2022-01-06 21:18:38
【问题描述】:
我有这门课:
class Product {
public double price;
public Product(double price) {
this.price = price;
}
}
还有一张地图:
Map<Product, Integer> products = new HashMap<>();
其中包含几个这样添加的产品:
products.put(new Product(2.99), 2);
products.put(new Product(1.99), 4);
我想使用流计算所有产品的总和乘以多个值?我试过了:
double total = products.entrySet().stream().mapToDouble((k, v) -> k.getKey().price * v.getValue()).sum();
但它无法编译,我得到“无法解析方法getValue()”。
我希望:
(2.99 * 2) + (1.99 * 4) = 5.98 + 7.96 = 13.94
【问题讨论】:
-
您使用流而不是通过循环遍历地图的
.values()更新的计数变量的任何原因? -
@Mike'Pomax'Kamermans 我的目标是对每个循环使用流而不是常规。谢谢
-
@JoanP。不要使用像
double这样的浮点数类型来获得金钱价值。这些可能导致意外的计算结果。见stackoverflow.com/questions/8148684/… 和stackoverflow.com/questions/3730019/… -
@JoanP。请看:What Do You Mean “It Doesn't Work”?
-
在您的 lambda 中,k 已经是键,v 已经是值。这就是它不编译 k.getKey() 的原因(你没有处理 Map.Entry,你已经在处理密钥)
标签: java java-8 java-stream