00:00
行,这第一波呢,我们就过了,哎,然后接下来我们看第二波,第二波呢,这个叫规约,哎,CTRLC一下,我们看这个规约呢,涉及到哪些操作。看这样子啊,不匀。规约呢,这里边用的一个方法呢,叫reduce啊,这个我们把下边呢,CTRLC一下粘过来。来看这个问题啊。说这个reduce,这呢有一个T啊,Identity,然后呢有个binary operator,说可以将流中的元素呢,反复结合起来,得到一个值啊,返回一个T。嗯,这个reduce咱们这个讲map的时候呢,稍微说过了一下啊,Map呢,它做的叫映射,呃,比如说我们这里边呢,放的都是employee,然后呢,它会针对每一个呢做一个映射,你可以得到每一个员工的salary啊真正就是salary了,这是映射过来的,然后呢,得到salary以后,我们下边个叫规约,哎规约呢,你可以把这些呢数据给它做一个萨姆求和。
01:03
把这些员工的salary呢,算出来一个总和啊,那么像大数据的同学呢,会接触到map reduce map呢就是做映射啊,Reduce呢去做规约,哎,这样的话我们就求出来所有员工他们的总工资是多少了。啊,这就是一个规约的过程啊,叫reduce行,那么reduce我们先举一个简单的例子,说计算一下一到十这个自然数的一个和啊,一到十这个自然数的和啊,那怎怎么办呢?啊,这呢是一个初始的一个值是吧,哎,我们这块呢,怎么写。这个叫boundary operator是吧?嗯,我们呢,你看是不是先得到一个list,比如我们这个叫integer integer,这是一个list。等于你有一个list。啊,这样写有点复杂了啊。对,第二。
02:02
哎,呃,不是sort了,As least。3456789。是这呢是前十个数,然后呢,我们通过list点调一下stream啊,得到我们这个stream了,然后接下来嗯,Stream得到以后,我们做一个reduce的操作,Reduce操作咱们是调到这个这个里边这个参数一呢,相当于是一个初始值啊,咱初始值呢就是零呗,哎后边这个参数我们看怎么写啊,后边这块呢,我们点一下这个reduce过来,就是它,诶这个结构,哎,发现它呢是诶再点一下啊,它呢是继承于我们这个叫by function。说传一个数,再传个数,呃,再得到一个最终的结果,嗯,这其实就相当于是,比如我传第一个数,你再传一个第二个数,这个呢,就相当于让这俩数做和啊,然后呢,把这个和呢作为第一个数,再把第三个数传进来,再去求和,哎,这怎么着?
03:03
哎,这个话呢,我们发现呢,这个integer啊,哎,它有个方法呢,就叫做sum。哎,这个sum的话呢,两个参数,两个参数的话呢,我们可以直接呢,你看这样,哎写个sum哎是不是就可以了。啊,为啥能写呢?哎,你看我们这个有一个静态方法叫做sum sum这个方法呢,需要传两个参数,刚才咱们看到的它那个,呃,函数式接口的抽象方法,不是也得传两个T吗?返回来不是也是个T吗?这不跟我们这个形式一样啊。又方法引用了。啊,这样啊,所以整个我们这一章讲下来以后呢,总结一句话就是听懂听不懂都是收获是吧?啊听起来还是有点困难,但是呢,感觉啊,大概知道是在做什么啊,这就是新的这个语法,大家下来你写一写就熟了啊。不用特别复杂,你就写一天差不多就熟了。当然了,放五天基本上就忘了啊,嗯,但是还是要写一写啊,嗯,这个呢,做一个reduce,这面就求出它的一个总和了,总和呢,我们al enter一下,哎,得到具体一个值啊,就的一个,比如你叫个sum了,哎,输出一下我们的sum,这呢就是一到十的这个和看看。
04:19
一到十是55是55吧,你算一下啊,哎,是55这个你要把这改成个十,这就是一个初始值。这65了,就。哎,就这意思,嗯,零嘛,初始值对就不加了个十嘛,就哎就这意思成,然后下一个啊,下个这个reduce,此说可以将流中的元素呢,反复结合起来得到一个值啊,这个它自动的就会有一个反复累加的一个过程,你看我们这里写这几个数,也没有说萨姆怎么就一下求和了,是你这两个求完以后呢,自动作为一个新的值,再跟这个去累加啊,再去累加,它自动就累加的效果,所以叫规约嘛,归成一个这样啊呃,反复的得到一个值,这个位置呢,需要传一个baary的operator,这呢我们做这个练习。
05:08
说呢,计算公司中所有员工的工资总和。那首先这个employee,第二,哎,怎么成为一个大写了。好啊,就是个大写的是吧,employed.get一个employees,哎,然后值啊行,先得到我们这个集合啊,Employees点首先stream下。嗯,这块工资的总和。其实你map一下也可以map一下,我们就得到纯是公司的这样一个这个stream了啊,你要不map呢,直接reduce呢,倒也可以考虑,只不过你到时候放的时候呢,你只能放1.getsalary是吧,不像我们这块呢,直接就放的是一个整形数了啊,大波形的数了啊,那我就先map一下啊。
06:00
卖一下呢,我先取出来每一个员工的salary。无意了,直接这样行不行?Get一下他们的salaries。也OK啊,那你要不习惯这样写呢,你就还用那个拉姆达表达式,那这呢,我们就首先得到一个由三瑞构成的一个stream。啊,这个我就直接往后就可以写了,但是怕有同学可能不熟哈,哎,你可以先让他接收一下,这呢是我们的salary,哎,构成的这个stream了,行,那得到salary构成的stream以后,下边呢,我们需要给它归约到一起,第二做一个reduce的操作,那这呢就不需要一个所谓的初始的一个值了,直接呢,我们这里边去让它做叠加啊,此时的叠加就是让他们求和,诶正好呢迎合我们另外一个叫double,哎,Double呢恰好它也有一个哎叫sum的这样一个方法,诶直接呢就写了。
07:00
哎,直接就这样做啊。可以了是吧。你你要你要不用它,咱咱们先把这个先跑一下啊out enter一下。Some money来输出一下啊,叫some money。诶,看一下这个所有员工的这个总工资是多少。哎,这么多啊,四万多。行,这呢仍然是一个option类型的,咱们先暂时忽略掉它啊,你从这个输出呢,也能看到这个数就可以了,嗯嗯,这是呢,是我们这个调这个方法,那有的同学可能想说我都不知道有这个方法呀。嗯,非常的合理是吧,嗯,那要不知道的话,那就怎么写呢。这个不知道,不知道的话呢,那就老老实实的写了,比如说啊,咱们这个reduce,嗯,这里边儿呢,咱们存放的只不过就是人要求的这个类型,你操作的这是double啊,那你这人家这个咱们刚才看这个源码了。
08:02
呃,源码源码点一下。把它给注释掉了。哎,这个你点一下这块看。嗯,咱们掉的还不是他。就是这个,诶这个的话呢,它是我们具体的一个BY方式,属于二元函数的一个啊这个集成的它了,嗯,这呢是两个自变量,然后因变量,所以它的特点呢,就是说传进的值跟返回的值是一样的。啊,那这个方法里边呢,这不就有两个这个它往里边放两个参数。在这看不着了,你看这啊。哎,这不他就放两个参数嘛,放两个参数返回一个参数,对于我们刚才这个结构来讲,它都是T行,那回过来咱们就可以。哎,这样写了这个呢,我们这是具体一个人的工资第一啊,然后还有一个人的工资叫第二。呃,第二,呃,然后呢,你用这个具体的拉姆达表达式,哎,返回谁呢,就第一加上第二呗。
09:06
哎,这自动的不就return了吗?就是相当于咱们上面呢,是double用的sum,不是我们让他去求和了,这块你自己求呗。这个呢是咱们reduce对应的这个,这是一个函数接口,这个函数接口呢,它的方法抽象方法的形参有俩,然后返回的呢是一个值这三个两个返这个行三和一个返回的值类型一样,咱们这不都是double吗?就是我们手动写的,你看刚才那这块呢,算出来是48000多,哎,我们自己手动写的,你调一下。啊,这不也是这个数吗。哎,这是就相当于手动写啊,那你要说呃,知道我们double里边就有一个现成的方法叫sum sum的话呢,本身sum方法也是放两个参数,返回一个参数,这两个参数跟这个参数类型一样,正好迎合我们这里边那个抽样方法,哎,正好他俩能匹配上,就是符合咱们说的方法,引用这样一个点啊,就可以这样去用,哎,行,这呢是我们说的这个,诶规约操作啊。
10:09
规约。
我来说两句