教程篇|手把手教你梳理Java Steam的工作方式,包教包会!

Posted JAVA炭烧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了教程篇|手把手教你梳理Java Steam的工作方式,包教包会!相关的知识,希望对你有一定的参考价值。

[炭烧有话说]:
Java Stream 已经出现很长时间了,但很多Java程序员还是不理解它的工作方式。

不会 Stream 不要紧,我们开发的时候可以不用 Stream,但理解 Stream 是咋回事还是非常必要的,至少得能看懂别人代码中的 Steam 是吧。

下面就通过一段代码,逐条说明每行代码的含义,然后再对照一下不使用 Stream 的用法,之后就可以轻松理解 Stream 的用法了。

1. Stream 示例代码解析

在这里插入图片描述

这段 Stream 代码共有 5 行,下面看每一行都是什么意思。

第1行

在这里插入图片描述
第一行我们分成2部分来看,一是内部的 Lambda 表达式:

num -> num + 4

这就是一个非常简单的方法,等价于:

int xxx(int num){
  return num + 4;
}

传入参数 num,然后返回 +4 后的结果。

第2部分是 Stream.iterate() 方法,此方法会创建一个无限的流,第一个参数 “4” 就是流的起点,第二个参数 Lambda 表达式用来生产后续的流元素。

那么第一行联合起来的意思就是,从4开始,之后的每个流元素都是持续 “+4” 计算出来,产生的流就是这个样子:

4, 8, 12, 16, 20, 24, 28, …

第2行

在这里插入图片描述

limit() 的作用和 SQL 的 limit 一样,都是用来限制数量的,Stream.iterate() 创建了无限流,通过 limit 将其变为了有限的流,限制了流中元素的个数。

例如参数 total 值为 5,那么流的样子就是:

4, 8, 12, 16, 20

第3行

在这里插入图片描述
第三行是 map 方法,其中还是一个 Lambda 表达式。

map 的作用是 ”变换“,把流中每个元素都用其中的 Lambda 表达式进行计算,得到一个新的元素,放入新的流中。

这个 Lambda 表达式的意思是计算平方值,那么流就变为:

4*4, 8*8, 12*12, 16*16, 20*20
=> 16, 64, 144, 256, 400

第4行

在这里插入图片描述
第四行 filter 的作用是对流元素进行过滤,其中 Lambda 表达式返回的是一个 Boolean 值,返回 True 的放入流中,否则丢弃。

这里是判断元素是否可以被 10 整除,流中只有 400 符合条件,那么流就变为:

400

第5行

在这里插入图片描述
第五行 reduce() 方法是最后的归纳总结,它有2个参数。

第一个参数可以理解为基础值,第二个参数是一个操作指令。

这里的意思就是:

从0开始,计算流中所有元素的总和,返回最终的累加值。
所以,这段 Stream 返回的结果就是 400。

2. 代码对照理解

为了更加便于理解,我们把这段 Stream 代码转换为普通写法:
在这里插入图片描述
下面把2段代码对照一下。
在这里插入图片描述
Steam.iterate() 第一个参数起始值对应 for 中的起始值,Steam.iterate() 第二个参数 Lambda 表达式,对应 for 中的每次循环操作。
在这里插入图片描述
limit() 限制流中元素数量,对应 for 循环中的结束条件,因为 for 里面需要限制的是最大数,所以要用元素个数✖️4来计算一下。
在这里插入图片描述
map() 对应 for 内部的平方计算。
在这里插入图片描述
filter() 过滤方法对应 for 内部的 if 判断。
在这里插入图片描述
reduce() 汇总方法对应了3行代码:

  • 定义汇总变量及其初始值
  • 循环中累加
  • 返回最终结果。
    ]
    通过前面的逐条解析,以及代码对照是不是就很好理解 Steam 啦,希望对你有所帮助。

想要获得更多关于java steam的资料,彻底吃透,可以私信我关键词[资料],或者看下方,获取更多java相关知识.

~获取方式~
加wechat: Mlzg5201314zz
扣扣群:614478470

以上是关于教程篇|手把手教你梳理Java Steam的工作方式,包教包会!的主要内容,如果未能解决你的问题,请参考以下文章

《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)

《手把手教你》系列技巧篇(四十九)-java+ selenium自动化测试-隐藏元素定位与操作(详解教程)

《手把手教你》系列基础篇(七十二)-java+ selenium自动化测试-框架设计基础-TestNG简单介绍(详解教程)

《手把手教你》系列技巧篇(二十六)-java+ selenium自动化测试-浏览器操作(详细教程)

《手把手教你》系列技巧篇(四十四)-java+ selenium自动化测试-处理https 安全问题或者非信任站点-下篇(详解教程)

《手把手教你》系列基础篇(七十三)-java+ selenium自动化测试-框架设计基础-TestNG实现启动不同浏览器(详解教程)