【发布时间】:2021-03-14 22:07:58
【问题描述】:
Java-8 提供如下流对数组求和,流是否支持product?如果 steam 不支持,有没有其他方法可以在不手动编写循环的情况下计算乘积?
int[] a = {1, 2, 3, 4};
int sum = IntStream.of(a).sum();
【问题讨论】:
Java-8 提供如下流对数组求和,流是否支持product?如果 steam 不支持,有没有其他方法可以在不手动编写循环的情况下计算乘积?
int[] a = {1, 2, 3, 4};
int sum = IntStream.of(a).sum();
【问题讨论】:
sum 和其他只是特定reduce 调用的快捷方式。
sum:返回此流中元素的总和。这是一个特殊情况 一个归约,相当于:
return reduce(0, Integer::sum);Reduce:对该流的元素执行归约,使用 提供身份值和关联累积函数,以及 返回减少的值。
然后你可以这样写:
int[] a = {1, 2, 3, 4};
int prod = IntStream.of(a).reduce(1,(x,y)->x*y);
【讨论】:
尝试使用reduce 方法。如下所示:
int product = IntStream.of(a)
.reduce((a,b) -> a*b)
.orElse(1); // fallback value if stream is empty
【讨论】: