【问题标题】:Java8: "Translate" old ForEach Method into Lambda/StreamJava8:将旧的 ForEach 方法“翻译”成 Lambda/Stream
【发布时间】:2015-10-01 02:17:06
【问题描述】:

经过数小时无望的搜索,我决定创建一个问题。 我真的没有找到任何方法可以将这种老式的编码方式转换为流/lambda。

也许有人可以向我解释一下。谢谢。

public double getSum() {
    double sum = 0;
    for (Product product : productList) {
        sum += product.getPrice();
    }
    return sum;
}

【问题讨论】:

标签: java foreach lambda java-8 java-stream


【解决方案1】:

您可以使用以下内容:

double sum = productList.stream().mapToDouble(product -> product.getPrice()).sum();

【讨论】:

  • 或者,使用方法引用而不是 lambda 表达式:mapToDouble(Product::getPrice)
  • 请注意,与 OP 代码相比,您可能会得到略有不同的结果,因为流版本实现了 Kahan 求和,可以防止错误累积。
  • @Tagir Valeev:使用doubles,即使使用相同的代码,您也总能找到差异。
猜你喜欢
  • 2011-12-09
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
相关资源
最近更新 更多