00:00
好了,那你说有了这个STEM以后呢,那接下来我们是不是就可以第二步给他来一系列流水线式的中间操作呀,对吧,等等等等,那么再来个右键呢。叫做test stream api2,对吧,那么将来呢,我们就可以进行一系列流水线式的中间操作,那么中间操作呢,实际上呢,是有很多种的,对吧,比如说呢,这里我们说有叫做筛选或切片对吧,筛选和切片或者呢,有这个叫做是映射呀,对吧,有映射什么,有排序等等等等,对吧,对吧,那么过来呢,咱们一个一个都试一试,我把它提取出来了,咱们过来一块用一下。嗯,Stream。史俊。啊,这呢,对吧,是不是这么几个呀,咱们先看第一波。
01:08
就这样吧。说第中间操作的这个第一波叫做筛选与切片,那么我们就一个个试一试,叫做word test1CTR啊,Shift第一个是不是叫filter过滤啊,过滤它是接收一个lada,说从流中排除元素啊,对吧,那么我们呢,把之前搞的那个employee的数组给他拿过来,我们用一用。叫收集目高一的集合呀,是集合呀。对吧,拿过来用一下,那么现在的现在第一步我说要进行过滤一下啊,那么过滤的话,我们说不管做什么样的,这个只要用硫,它是不是肯定都有三步对吧?第一创建流,第二步呀,这一系列的中间操作,对吧?最后是不是终止操作啊,对吧?那首先我得根据现在这个employ先怎么样,是不是点streamam先获取流啊对吧?然后紧接着你是不是就可以做一系列流水线式的中间操作呀,咱们先来一个,第一个叫做filter,对吧,Filter这里边需要一个参数,需要一个叫做predict,对吧,Predict叫做断言型接口,对吧,那大家即便是忘了这个断言型接口也没关系,你是不是稍微的过来看一眼呢?对吧,叫predict,是不是在function上就提function,那这里是不是就是传进去个参数,返回个不不对吧,就是你要判断的function。
02:40
老师今天咱们是不是也试过了对吧?那么这个时候呢,我要过滤过滤什么呢?是年龄大于35啊对吧?比如说来个传过来的是一,然后1.geth大于35对吧?那么注意我现在filter完了以后呢,它实际上是不是给我产生的是一个心流对吧?是不是产生心流啊对吧?那么这个时候呢,我为了让大家看结果,我是不是得来个终止操作,不然的话,我们看看这个中间操作有没有任何的结果,右键运行。
03:14
是没有任何结果呀,对吧,你光filter是没有用的啦,你只有做什么操作呢?终止操作才行,比如说我现在就这样,对吧,来个employee对吧,这是不是filter之后啊employee对吧,Employee以后,那么现在呢,它本身呢是中间操作,是不会有任何结果的,所以说为了现在给大家演示的效果,我们是不是来一个终止操作呀,对吧,终止操作,比如说点for each,这是不是叫终止操作对吧?那再去system.out点呃,点的冒冒号冒号冒号Y对吧,经过一个过滤以后,右键运行是不是过滤了,对吧?那这样的话就过滤。
04:06
听懂吗?对吧,我们说给大家再进一步演示一下,我们说中间操作它不会有任何的结果的,我们搁这里呢,为了表现对吧,内容多一点,我给他先来个大括号,我在这里多输出几句话。可以吧,叫做stream对吧,API的中间操作,然后最后呢,是不是叫return这个东西啊,对吧,就因为我没做终止操作,我是不是看看这个中间操作这句话执不执行不执行对吧,那么我们右键运行。执行吗?是不是根本就不打印呢?对吧,没有任何效果,所以说中间操作是不是没执行啊,那最后注意看,我说不来个终止操作对吧,这个叫做中止操作,嗯,这个叫做中间操作,中间操作,那么这个时候呢,右键再去运行,这回执行没,是不是执行了呀,对吧?那这时它是不是才给我一个执行啊,先过滤对吧,先判断满不满足条件,取出定算是不是判断满不满足啊,不满足是不是就不打印,然后再第二遍看看满足满足条件,满足条件是不是打印了,然后再判断不满足不打印,再判断满足条件是不是打印呢,然后再判断。
05:24
是不是把这个我所需要满足条件的employee都给我打印出来了,对吧?那么实际上这个叫叫什么呢?我们说中间操作它是不会执行任何操作的,只有当你执行终止操作以后,所有的中间操作是不是一次性执行全部,对吧?那么这个过程我们就称之为叫做惰性求值,或者叫做延迟加载。是不是对吧,就看说多个中间,中间操作可以连接起来形成一个流水线,除非这些流水线上触发了终止操作,否则中间操作时候不会执行任何的处理,对吧?而在终止操作时一次性执行全部称为惰性求值。
06:14
听懂完了对吧,那么得到的结论就是什么意思呢?得到的结论就是说说中间操作是不会做任何的操作呀,对吧,说不会执行任何操作,是不是直到终止操作时才能执行全部的内容呢?对吧?或者一次性一次性执行全部内容,这个过程我们就称之为叫做惰性求职对吧,这个过程我们就称之为惰性求值。这能听懂吧,对吧,刚才中间操作不会执行任何,只有当做终止操作时才会一次性的执行全部就叫惰性求值。搞定了,那么接下来大家再看,刚才我们通过这个结果发现它有没有个便利迭代的操作,这个迭代操作是我们做的呢?你做了迭代了吗?说没有,明显这段代码是没有任何的用于迭代的代码啊,对吧,那我说迭代操作不是我做的,那你觉得是谁做的?
07:24
是不是人家STEMAPI给我们做的,对,老师不有自本身给我做的呀,对吧,因为什我说这个这个迭代操作是人家STEMAPI给我们提供好的,不需要我们自己去迭代了,对吧?那么这个迭代我们就称之为叫做内部迭代,所所说的内部迭代就是迭代操作由人家team API是不是给我们完成的呀,所以说是说不需要我们完成迭代的这个操作,对吧?那你说说那内部迭代是人家STEMAPI完成,那你说什么叫做外部迭代,哎,那是我们自己写啊,比如说我们说word test啊对吧,我们说这个自己写迭代,那是不是叫做employee点儿是不是啊,你得得到是不是啊对吧,拿到它以后是不是再来个while循环I。
08:25
p.has next sit out I t.next那么我们说这个是不是就叫做外部迭代啊,我们得通过迭代器循环一步一步来吧,这是不叫外部迭代对吧?这个就叫做外部迭代,上边的这个呢,迭代操作人家API给我们自己完成了,所以说就叫做内部迭代。这个过程能懂吗?没问题吧,对吧,这叫内部迭代,还有一个叫做惰性求值。那再看下一个,下一个什么呢?下一个是不是叫limit呀,对吧,Limit limit实际上刚才咱们是不是已经用过了呀,对吧,叫做哎,叫阶段流对吧,说其使其元素不超过是不是给定的数量啊,对吧,那么我们就来一个叫employees,点上叫做首先不管你要做什么操作,是不是都得先获取流啊,然后呢。
09:29
就可以点limit对吧,我可以先获取两个吧。可以吧,或者这样先过滤,先过滤,过滤之后再获取两个可以吧,叫做filter,先过滤传过来一个E,然后呢,说1.getsalary大于5000对吧,然后是limit对吧,对吧,取出几个,那么相应的我是不是可以直接来个终止操作对吧?注意终止操作还没讲,我们就搁这块,为了看结果,演示一下一系列中间操作,加上一个终止操作,这是懂吧,对吧?那么右键呢,我们运行。
10:12
是不是就取了俩呀,对吧,如果没有这个的话,没有limit,我们看看右键运行是不是四个有了limit以后,对吧,再去右键。对吧,右键运行是不是就取俩呀,对吧,那这就叫limit对吧,使其元素不超过给定的数量,那么这个时候再再演示个什么呢?我还把这个filter多写几句。还把这个filter这个呀,多写几句,我说在这里写个叫做短路对吧,然后呢,在这里呢,再去这个东西对吧,那这个时候呢,我注意看啊右键。运行。注意我迭代操作执行了几次,几次是不是执几次,是不是循环过者迭代操作是不是只执行了两次,也就是说他只要找到我满足条件的数据以后,之后的迭代操作还在还继续吗?是不继续了呀,对吧,说只要是迭代两次,找到了我所需要的数据以后,后续的迭代操作是不是就不再继续了,通过这个结果是不是能证明对吧?那么这个过程是不是叫短路啊?
11:33
对吧,也就是说在某种情况下,它能不能提高效率,是不是也可以啊,对吧,它不需要迭代所有的,只需要找到满足条件的这两条数据以后,那么后续的操作就不再继续进行了,这个过程就叫做短路,实际上跟我们之前学的这个是不是有点类似的?这个东西短路与和短路或啊对吧?短路语是不是当左边表达式为false时,右边是不是就不用再算了呀?那是不是就短路提高效率了吧,对吧?现在这个是不是也一样啊,一旦发现了两条满足条件的数据以后,其他后续的迭代操作不用再继续进行了,那么这个就叫做短路,也可以用于提高效率。
12:20
看到没有好,那么这个呢,就叫做短路,也就叫做limit,下一个下一个skip对吧?那么skip叫做跳过,所以返回一个扔掉前N个元素的流啊,若流中不图N个,是不是咱返回一个空流对吧?跟limit是互补的,它是扔掉前几个,那么首先还是得到硫,我们还可以filter去过滤,除了一一.get salary大于5000,然后是不是叫skip来个二啊,对吧?再来个for each system.out line。
13:03
右键。运行。嗯,跟刚才的比呀,对吧,刚才的是不是取前两个呀,999和五五啊,现在呢,我是不是取后两个呀,说白了右键运行是不是666888呀,对吧对吧,那这是跳过前两个,跳过前两,然后取后两。是这意思吧,对吧,那叫跳过,那下一个叫distinct是不是叫去虫啊去虫去虫呢,我再来一个,这是不是来个田鸡,我再来个田七是不三个天72岁8888对吧?那么这样的话呢,我先看看取一下,先看看有没有是不三个田七对吧?那这个时候呢,我来个在这中间来一个做第PI是不是又多了个中间操作呀,去的虫看看去的调不又键。运行是发现没去掉啊,说为什么没去掉呢?说哈是通过Co的和ES是不是去重啊,所以说要想去除重复元素,我这个employee必须哎是不得得重写哈SCO的和equals是不是才行啊,对吧?那我们生成一下注意哈奇code的equals是不是提过呀,那么再回过来再去右键运行去了没?哎,这回就去了对吧?那这就是string中间操作的筛选和切片。
14:38
这发也很简单的,像是类似于这样操对数据的操作,那是不是很经常要对吧,很经常嗯。同学们对吧啊。
我来说两句