利用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。

posted @ 2020-11-04 14:35  wingsless  阅读(107)  评论(0编辑  收藏  举报