这是另一种方法:
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);但是你总会过夏天。
reduce也是有问题的,因为它返回了
Optional。上面的
sum方法为一个空的映射抛出一个异常,但是一个空的和应该为0。当然,我们也可以传递0:
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);


