java - 在使用流 API 的 Java 8 中,如何从需要多次计算的 Map 返回实例

标签 java lambda java-8 java-stream

假设有这样一个类:

class A {

    long sent;
    long received;
    double val; // given as max {(double)sent/someDenominator,(double)received/someDenominator}
}

其中在 Map<String , A> 中有多个实例引用.

是否有可能使用流 API 一次性返回具有以下属性的类 A 的实例:

  • sent = 所有实例发送字段的总和
  • received = 来自 Map 中所有实例的接收字段的总和
  • val = val 的最大值,给定所有条目,其中 val = max {sent/someDenominator,received/someDenominator}

什么是使用标准 for 循环和一次迭代的微不足道的任务,我不知道如何使用流 API 来实现。

最佳答案

你可以使用reduce:

Optional<A> a = map.values()
                   .stream()
                   .reduce((a1, a2) -> new A(a1.sent + a2.sent, a1.received + a2.received, Math.max(a1.val, a2.val)));

关于java - 在使用流 API 的 Java 8 中,如何从需要多次计算的 Map 返回实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35361734/

相关文章:

c++ - 线程lambda中的原子更新

Java 日期时间格式化程序 : Print milliseconds to 3 places only if not 0

Java 8 拆分字符串并在 Map 中创建 Map

java - 子流中列表大小的总和

java - 根据条件创建文件

java - 随机选字母功能

java - 从 Maven 依赖项动态加载类

java - Selenium chromeDriver 打开速度比直接在 chrome 浏览器中打开网站慢得多

java - 是否可以使用 Java Lambda 来实现类似 Groovy 的 SwingBuilder 之类的东西?

c++ - 在 boost::geometry::for_each_point 中使用 lambda