利用Stream实现简单的等差数列求和
我们都熟知高斯的故事,认识等差数列也是从这个故事开始的,编程课程为了练习for循环,也在不断的练习这个从1加到100的例子,那么原始的办法是这样的:
int sum1 = 0;
for (int i = 1; i <= 100; i++)
{
sum1 += i;
}
System.out.println(sum1); //5050
但是这个段代码稍显冗长,如果利用流式编程,则会漂亮很多:
int gaussSum = IntStream.rangeClosed(1, 100).reduce(0, Integer::sum);
System.out.println("gaussSum=" + gaussSum); //5050
上面这段代码的逻辑是首先生成一个从1到100的等差数列,然后对其进行reduce聚合,结果就出来了。
或者再进一步,如果要给一个2到100的偶数数列求和,该如何写代码,传统的代码:
int sum1 = 0;
for (int i = 2; i <= 100; i+=2)
{
sum1 += i;
}
System.out.println(sum1); //2550
换成流式编程:
int gaussSum = IntStream.rangeClosed(1, 100).filter(n -> n%2==0).reduce(0, Integer::sum);
System.out.println(gaussSum);
这里用到了filter接口,代码也很简单,还有点像Python的range。