List<Integer> numbers = Arrays.asList(1,2,3);
为什么不能像这样对它们求和:numbers.stream().sum();
?相反,我必须这样做:
numbers.stream().mapToInt(e -> e).sum();
我知道mapToInt
会产生一个基本类型的IntStream
。但是我还是不理解为什么不能直接对整数求和。我知道这个列表里面都是整数,编译器应该可以做到同样的事情。毕竟,它现在可以在lambda表达式中推断类型参数。好吧,可能有Integer是null,导致求和失败。但是我可以承担这个责任并过滤掉null:
numbers.stream().filter(Objects::nonNull).sum();
为什么我不能对整数流进行求和呢?
List<Object>
。 - Elliott FrischStream
接口没有定义sum
方法,因为它并不适用于所有流。通用解决方案是使用reduce
方法。 - Denys Séguret