00:00
好了,那么接下来呢,咱们继续往下看看这个是不是STEM的最后一个操作,是不是叫终止操作呀,对吧,终止操作string api3对吧,叫做这个终止操作对吧?终止操作,那么终止操作呢,也有这么几个,咱们过来对吧,首先叫做查找与匹配对吧?那。要查找与匹配,你说先走,那么查找一匹配呢,咱们还是过来把那个employee这些拿过来,拿过来以后呢,我们说把这个往这把这个音employee呢,咱们再搞的稍微的复杂一点点,对吧,再稍微复杂点,比如说我给它加个状态对吧,加一个状态,比如说来个private us status对吧?嗯,这个呢,Status是什么呢?我给它建成一个枚举,枚举枚举呢就是public,是啊,叫做status,所以我们说一个employ职员是不是可能有几种状态呀,对吧?比如说分别什么呢?这来叫做free f re对吧,然后呢,有这个busy,有这个VO对吧,对吧,有什么这个。
01:31
空闲呢,忙碌啊,休假这几个状态,咱们基础小项目的时候是不是也遇到过呀,对吧,说这个程序员呢,都有这么几个状态,对吧,对吧,我们过来也试试,然后下面的呢,那我也给它多提供一个构造器对吧,带状态的构造器整测shift的F,多余的删一删,现在呢,通子俊呢,我也给他删掉,变成新的涂子俊,这是不大是不搞定呢,搞定搞定以后呢,把这个多加几个状态,比如说他呢,给他加一个它是standards stas,点上叫做free对吧,它呢,我给它加添加一个叫做busy对吧,然后呢,它呢,我给它添加一个叫做vacation,那它呢,我给它添加一个叫做嗯,Free对吧,然后这个呢,我添加一个叫做B对吧,那么先下边这两个呢,我还要吗?行不要了,那是剩五个啊好,那么接下来呢,就可以。
02:31
看这几个了,对吧,第一个叫做正式操作,叫做检查是否匹配所有元素对吧,说是不是匹配所有元素啊,对吧,那不管怎么样,首先第一步只要用硫,那得先获取流,然后说一系列的这个中间操作呀,对吧,当然这个中间操作要是没有的话,是不是直接来个终止操作呀,比如来个all match,这里边是不是需要一个predict呀,对吧?那么这样的话呢,我就给他来一个。叫做传过来的是个employee,然后呢,我要看看这个,比如说1.get是不是standards啊,不行,这standard没提供干的方法呀。
03:11
我得给他提供一个get set方法。然后再成shift f一下,然后呢相呢,这回过来我们说如果这个1.getstandards,点上equals,如果是叫做standards.busy是不是这意思啊,说看看是不是所有的都处于这个叫做busy状态吧,是不是这意思啊,对吧,那相应的它是不是会给我返回一个不尔值啊是不是嘛,对吧,是不是匹配所有元素,那是不是匹配所有的元素呢?不是,那右键就右键运行false,那是不是就不是啊对吧,不是匹配所有的元素是不是,那如果要是都是BC的话,对吧,都是BC,那要是都是BC的话,那相应的右键运行,那是不是就错了,对吧,对吧,是不是匹配所有元素,那么下一个下一个呢,叫做是否至少匹配一个元素了,对吧,至少。
04:17
匹配一个元素,那就是还是employees,点上stream对吧,叫做stream,然后点上叫做any match,是不是至少匹配一个,那就1.getstandards,点上equals,还是standards,点上busy,对吧?说是不是至少匹配一个玻璃的B2,那么这样的话呢,我就c out一下B2,那么右键运行。是不是错啊,对吧,说至少是不是有一个匹配的呀,这个就有点类似于咱们之前讲这个circle口的时候,是不是说过这个多行子长询的时候,是不是说过这个多行操作符啊,有的叫做an和O,是记得呀,对吧,那是不是跟这个是类似的呀,对吧,An和o an any就是说只要有一个条件满足,是不是结果就满足啊对吧,All是得所有的条件都满足,是不是结果才满足啊对吧,对吧,那这就是any和好,下一个呢,叫做慢慢使,对吧,叫做检查是否没有匹配所有元素了,对吧,是不是没有匹配所有元素,那就employees,点上stream,点上叫做none match,然后还是叫做E,然后呢叫做一点get standards DA standard,点上ES standards.bc对吧,相应的得到一个布尔的B3,拿到它以后C是二。
05:48
看B3说是不是没有匹配所有元素吧,对吧?那么右键运行false,那就叫不是没有匹配所有元素啊,那不是没有匹配所有元素,那就是有匹配的元素对吧对吧,双重否定那不就肯定吗?是不是意思啊对吧,不是没有匹配所有元素,那就是有匹配的元素,是这意思吧?对吧?那叫那match下一个就find first是不是返回第一个元素啊,那么第一个,那比如说呢,我们就可以按照这个工资排下序,排完序之后获取第一个可以吧,对吧,按工资排下序,那我们就来个叫employees,点上stream,然后呢,Short short一下,那么按工资排我是不是得这个呀,对吧?那么传过来一个E1,一个E2,对吧,然后E1呃排序,那比如说叫double,点上compare,叫E1.get。
06:48
啊,Salary对吧,然后呢,一二.get salary是不是按照工资比一下对吧,然后来个半的first是不是找第一个呀,他会给我得到一个什么呢?注意得到应该是个o personal,嗯,得到的是个optional,注意看这个optional是个什么东西啊对吧,之前我们说了说这个这八它是不是尽可能的去避免控制异常了,对吧,尽可能避免控制内常,那怎么避免?它就搞了这么一个open动式的容器内,听懂没?它要把我们这个对象是不是封装到这个容器里了呀,有了这个容器以后,它就可以有一些什么方法了呢?比如说有个叫做all else方法,这做all else,那这样的方法就是指说如果op中封装的那个对象为空,你就可以搞一个替代的对象是不是,那这样的话,那是不是就不能就避免了为空啊说如果。
07:48
P里边那个值是空的,你就可以有一个替代的对象,这个就有点像咱们circle索里边写的那个什么呢?是不是有个叫做if no if闹一不,No指的就是如果为空,是不是用一个什么代替一下,对吧?说如果为空,我们说用零补一下是不是这意思啊,对吧?那这样的话,它使用这种方式解决的控制帧异常,把返回的那个employee封装到了option里,对吧?避免控制异常,为啥他这次之前返回的都不是option,这次返回的是option呢?它是这样认为的,所以如果这样的值最终的这个结果有可能为空时,对吧?只要有可能为空的话,那么它就会把这样的值封装到O这个容器中去,是吧,对吧?一旦有可能没空,那就把它封住,那我说查找第一个,那这第一个是不是有可能就没有,第一个说你查找一定找,是不是根本就没有数据啊,那是不是就有可能为空对吧,那他就把。
08:48
这种有可能为空的值封装到了O中是对吧?那么相应的我们也可以去后边咱们对它里边的方法咱们再详细说啊,那么现在呢,我是要获取里边的这个对象呢,用op.get它是不是给我返回的是input employee啊对吧?就把里边那个对象取出来对吧?右键。
09:12
运行注意,那是不是就给我取出一个呀,对吧,这是第一个,这排序之后获取第一个,第一个就是工资最低的对吧,那你也可以说来个工资最高的呀,加个负号是吧?那么右键。运行是不是工资最高了对吧,对吧,就是按照什么排序,然后获取第一个是这意思吧,搞定,那么接下来呢,再往下看下就叫find any对吧,所以实际上这个any呢,在以前咱们也能用到过,比如说咱们有以前有需求,我们是不是说做成什么这个,从这个当前公司中找出一个程序员加到开发团队呀,对吧,我说找一个处于空闲状态的人加到开发团队中去,对吧,那我说这个时候呢,我就可以用any,对吧,像随便找一个,只要是空闲状态就给他加到我的团队中来,就可以有这类似于这样的需求啊,对吧,那我们就可以点上stream,然后点上的叫做find any,对吧。
10:20
哎,对,不行,我说得先把那个空闲状态呢,给它过滤出来啊,是不是叫filter啊,然后呢,来个E,然后e.get standards,点上equals,然后standards.free是不空闲状态的,然后find到any,是不是随便找一个对吧,得到一个o personal对吧?然后or拿到它以后呢,我就可以sit out一下,Sit out op2点上get,把这个取出来,那么右键。运行。那这是随便找个空闲的,那是不是还是他呀,恰好跟上面这个巧合了是吧,对吧,那我这空闲的有两个,空闲的有两个,那是不是有的时候可以随便啊,随便的话我们可以怎么办呢?注意我这里employ.stream,这叫是不是获取一个串行流对吧?我也可以这样叫做parallel stream,这叫获取一个并行流,并行流指的就是什么呢?它是不是去找空闲呢?它是多个线程同时找,谁找到算谁。
11:28
听到没,刚才那个串行,串行指的是不是一个一个的一个一个走啊,对吧,找到一个是不是取出来呀,而现在并行指的是不是你多个线程是不是同时去完成过滤和find any。Human嘛,对吧,那这样的话para stream就是并行,那并行的话是不是就获取的谁就不一定了,对吧。还是让三右键运行,还是张三右键运行,还是让三是吧,那么这样的话呢,福瑞我照六是不是概率大点啊对吧,就让大家看到是不是它是并行的呀,对吧,就随便获取一个是不是就照六了对吧?那这回就是照六了对吧,对吧,好了,那么这就是并行,那以上这几个是不是就是关于查找的呀,对吧?那么下一个下一波下一波呢?那我们说了,现在有了streamam API是不是就能像操作这个S后语句一样啊简单对吧?那么比如说什么呢?这时候叫count max me对吧?什么总数最大值最小值啥的呀,那做数都是算数中的主函数是吧,对吧?那么就来employees,点上stream,然后直接来先来个点count,当然你也可以中间一系列过滤再看是。
12:49
不也可以啊,对吧,那么count的话,它应该是返回的,是不是这个long啊long count对吧?拿到这个count以后呢,我就sit out一下,说总数,说当前公司中一共有多少个人,是五个人呢,对吧?那这是第一个,第二个叫max,是不是返回流程最大值叫employees.stream,然后获取一个最大的值吧,那么最大值我们说点max对吧。
13:19
点max max找最大值,你是不是得comp去比呀,你得按照什么去比最大的吧,对吧?那么比如说我们按照员工的employee对吧?那么还是像刚才这个E1和一二是不还是按照工资啊,叫double,点上compare e1点上get salary对吧,Aryy对吧,然后呢,一二点上get salary是按工资获取个最大的值,它会给我返回一个叫做是不是也是optional啊optional employee叫做op法。对吧,然后拿到它以后呢,我就sitoutop1.get,按照工资找出一个最大的,那是不是9999对吧,对吧,对吧,按照工资获取一个流中最大值,那现在呢,是不是还有最小的呀?那刚才我是获取了工资最高的employee的信息吧,现在我要获取个什么呢?现在我要获取一个工司中的最小工资是多少?
14:31
听懂啥意思吧,是吧,获取公司中最小的工资是多少对吧?就获取那个工资啊对吧?那这次我们得怎么办呢?你们有想到了吗?你得先把什么给它提取出来吗?是不是先把工资提出来啊,那就点用什么提取是不map提取映射啊对吧?那么提取工资那就employee叫做get,是salary啊,然后是不是再去运一下啊对吧,命一下呢?那就直接叫double的compare para。
15:06
搞定不搞定不搞定对吧,是不是这意思。这句话能懂吗?可以吧,对吧?那这样的话它是不是就给返回了一个叫做O,这次是里边放的是double了吧,对吧?Or拿到double以后就c op2点上get,那这样的话呢,就右键运行是不是最低工资啊对吧?先把工资都给它提取出来,通过map,然后呢,再从工资中找出一个最低工资,知道最小值是多少。搞定了好了,那么这个呢,就叫做查找与匹配终止操作的第一波,不搞定了,那么F。
我来说两句