如何在Java中将Map中的key * value相乘?

Ioa*_* P. 0 java java-8 java-stream

我有这门课:

\n
class Product {\n    public double price;\n\n    public Product(double price) {\n        this.price = price;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

还有一张地图:

\n
Map<Product, Integer> products = new HashMap<>();\n
Run Code Online (Sandbox Code Playgroud)\n

其中包含添加的几种产品,如下所示:

\n
products.put(new Product(2.99), 2);\nproducts.put(new Product(1.99), 4);\n
Run Code Online (Sandbox Code Playgroud)\n

我想使用流计算所有乘积的总和乘以值?我试过:

\n
double total = products.entrySet().stream().mapToDouble((k, v) -> k.getKey().price * v.getValue()).sum();\n
Run Code Online (Sandbox Code Playgroud)\n

但它无法编译,我得到 \xe2\x80\x9c无法解析方法getValue()\xe2\x80\x9d。

\n

我预计:

\n
(2.99 * 2) + (1.99 * 4) = 5.98 + 7.96 = 13.94\n
Run Code Online (Sandbox Code Playgroud)\n

Dun*_*ncG 6

条目流需要每个条目的单个参数 lambda,而不是(k,v)

double total = products.entrySet().stream().mapToDouble(e -> e.getKey().price * e.getValue()).sum();
Run Code Online (Sandbox Code Playgroud)