假设有这样一个类:
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/