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

假设有这样的类:

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}的所有条目

使用标准循环和一次迭代会有什么琐碎的任务,我不知道如何用流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 8中使用流API,如何从Map返回实例,需要多次计算 - 代码日志