这是执行此操作的另一种方法:
int sum = data.values().stream().reduce(0, Integer::sum);
(然而,总而言之,保罗的答案减少了拳击和拆箱。int
至于一般地这样做,我认为没有一种方法可以更方便。
我们可以做这样的事情:
static <T> T sum(Map<?, T> m, BinaryOperator<T> summer) {
return m.values().stream().reduce(summer).get();
}
int sum = MyMath.sum(data, Integer::sum);
但你总是最终度过夏天。 也是有问题的,因为它返回 。上述方法为空映射引发异常,但空总和应为 0。当然,我们也可以传递 0:reduce
Optional
sum
static <T> T sum(Map<?, T> m, T identity, BinaryOperator<T> summer) {
return m.values().stream().reduce(identity, summer);
}
int sum = MyMath.sum(data, 0, Integer::sum);