00:00
成,那这个完了以后,我们接下来呢,关注的就是它的这个第二步这个操作了。诶,接下来这个操作就是叫中间操作,这个中间操作的话呢,它是一个链,就是你可以做多个这个操作方法,链的方式呢,不停的去点就可以了,那这呢,我们把这个中间操作涉及到这个方法呢,又分了分情况啊,这是第一种情况叫筛选与分片,诶切片这个呢叫映射,这个呢叫排序来分成这样的三波,那么首先看第一波叫筛选与切片。哎,这个呢,我们再新建一个说明。Test啊。主要呢,我们来测试一下stream它的中间操作。行,这呢是我们测试它这个第一波。
01:03
好,那中间操作关于这个筛选与切片呢,这我放了有这四个方法,那这四个方法呢,我这也在下边写了关于它几个的注释啊,诶CTRLC一下,这样我就方便的能粘过来,直接呢,我们在这来举例子了,就。行,这我们直接呢,就在这块去说啊,首先这个叫filter过滤,过滤针对于我们这个predictdic是一个断定型的一个接口,嗯,你可以从这个流当中把某些数据呢给它排除之外,这是呢就叫一个过滤的意思,那首先呢,我们得得到这个stream,那stream呢,暂时咱们就可以拿这个集合这块数据来考虑,所以呢,我们先employee data,哎,去get一下我们这个数据。啊,这个我就叫个list吧,行,这呢是咱们这个employee啊,Employee构成的一个list,下边呢,我们去过滤这里边的一些数据,简单来看一下啊这呢是我们的这些数据,比如说我们想过滤一下这个。
02:04
年龄也行,或者这个工资也行,比如我们找一下这个工资大于7000的吧。过滤一下这些数据行,那首先list咱们刚才提到了调,调了一个STEM方法,哎,调了一个方法得到一个stream,第2STREAM咱们,诶给它先生成一个吧,哎拿到一个stream,那接下来这个stream点。点什么呢?不是要过滤吗?Filter。里边呢,需要写一个PK的一个时间类对象,你可以去new哈。你要用的就是老的写法,要不呢,你就这块呢写拉姆达表达式呗。Predict传它那个方法啊,是叫test,传一个参数返回是布尔,哎,有这个概念就行,传一个参数传什么呢?我这写的stream,呃,Employee这呢,自然而然的就是employee,所以我这呢,传一个参数就E返回什么。反回个波尔型的,我们要找的是一点,Get它的salary,判断是不是大于7000块钱。
03:06
好,写完了。嗯,然后呢,哎,但是这样你写完以后,咱们刚才那会儿讲提到这个事儿啊,你这个中间操作的话呢,你光写中间操作它不执行,你得有终止操作才才执行的,哎,它这个我们有一个延迟操作啊,所以这块呢,我们操作完以后呢,顺便呢,先得用后边一个终止操作,这个终止操作呢,就是一个便利啊for each里边呢,是一个消费者,消费者典型的不就是输出语句吗。哎,我这呢,就用这个方法引用了。哎,所以这块呢,其实大家你多写几遍,你发现你看到这消费者你直接的写输出了,你也没去想过多的因为什么,所以什么还是熟悉的问题是吧。来执行。大家看这时候我们查出来这个工资呢,都是大于7000的啊,这是这样的数据啊,像原来的话呢,我们得自己写这个代码。
04:00
这呢有一个list,我想看一下里边这个谁的工资大于7000,是不是得自己写啊?那现在的话,你直接调四人API就直接搞定了啊,两行搞定啊行,这是第一个问题。啊,我们这个练习,哎是查询。哎,员工表中这个薪资大于7000的员工信息。好,下边说这个叫limit啊,叫截段流,截段流就是使其元素不超过给定的数量,其实咱们刚才也用它了是吧?用它了啊,注意你看这时我拿谁调,我拿这个stream调啊,你看能不能行,Limit我这直接写一个三,哎,咱们来一个for each for each里边呢,跟这个一样,直接粘一下。哎,这个跟咱们上边这个区分开,我这来一个换行啊。注,看我这样写行不行,啥意思呢?我们这个list呢,得到了一个掉了一个方法得到一个stream,这个stream呢,你看我们在这中间操作终止操作是不是都做了呀。
05:13
刚才说过了,一旦执行了终止操作,你这个stream的话呢,是不是就不能再回到中间操作这块接着做了啊,你看我们这块执行会不会报这个问题。啊,确实那报错了,非法的state说呢,你这个stream呢,啊,可能已经被关闭了,对,就是一旦呢,执行终止操作就关闭了,啊所以不行不行怎么办呢,重新是不是生成一下,就跟咱们说的那个ER一样。每调一次这个集合的那个方法,它就给你生成一个新的迭代器,啊,这个呢,也是相当于给我们生成一个新的stream。哎,这样啊。好,你看这时候就出来这个数据了,这个数据呢,其实就是咱们这个表当中的前三条数据啊,哎,前三条数据。
06:05
行,这个呢,咱们就过了,在下边这个呢叫skip。哎,SK呢,就是跳过几个数据的意思,哎,CTRLCCTRLV,比如我这个位置我就写的还是三啊,我叫SKIP3,相当于是不是就把前面那三个给过滤了过过掉了。跳过前面几个数据的意思。哎,这呢是咱们后边这一波,咱们这呢,这不就写了这八条数据啊,你看ID就知道正好是一到八,所以呢,刚才我们limit呢就要三个,那就是前三个,我现在呢要过掉三个,那就从第四个开始。相当于呢,就是我们,呃,这个limit方法跟这个词Q方法,它俩是不是正好互补啊。哎,就是你要这都写了三这呢就是前三个,这个就是哎,除了前三个之外,剩下的就是这个互补的一个概念,诶这呢又写了一句话说返回一个扔掉前一个元素的流,假设这个流当中呢,不足N个元素就返回一个空流,比如说呢,我这写个30。
07:14
相当于你想跳过前30个,根本就没这么多。所以这块执行的时候,相当于就啥也没有了。都跳过去了没有。哎,就这个情况啊,成这个呢也好理解,在下一个呢,叫distinct啊筛选筛选,嗯,就是根据这个哈希code和这个e code方法,这个以后大家学数据库的话呢,也有一个关键字,就叫做distinct,叫去重,对就是你要是有重复数据呢,这块就给你把重复的呢删了,就剩一个按照这个标准来判断的。哎,就像咱们set里边呢,判断数据重复不重复的一个标准啊,所以呢,我一开始在这个employee这块呢,把这两个方法都写好了啊。嗯,成,那回过来,那这块呢,我们测试一下啊,测试的话呢,就是我们先这么这么着一下,这个例子呢,本身里边有些数据,这里边儿数据暂时呢是没有重复的,那我在原有的这个list的基础之上,我现在去艾特一些新的数据啊employee这个我们再加点数据,比如说100。
08:16
1010吧。啊,来一个人,比如说哎刘强东东哥是吧,东哥现在比较惨啊,嗯,现在不敢出来了,都是吧?啊然后呢,写他的一个年龄就是40。哎,工资这个我们就8000吧,这样一个值啊好这呢写了一个,然后我现在呢这样。切了好几个,那此时呢,如果按照我们这个标准来的话呢,肯定是算重复的,那但是这个呢,呃,光它是跟我们这里边儿的数据这个一样而已啊,其他这个属性都不一样。然后回过来,哎,现在,呃,你要不放心的话呢,你可以先看一下,我们当前list里边是把数据加进去了。
09:02
那这个横着就有点儿长了啊。哎,这不是我们加进来,确实这个数据有,那这你不用担心了,在这个现有的这个有重复数据的一个list当中,咱们呢,先调一下stream方法,得到我们这个stream,接着的话呢,我们去做一个distinct,不需要做什么事,它就自动的帮你按照这个逻辑呢去驱虫了。那很显然,我们填的这个数据呢,是不是都是一个类型的呀,你别整什么string啥的啊,那就没法比这个情况了啊,那接着的话呢,再for一下。诶打诶print了啊打印好执行。哎,我们看一下这个情况啊,这呢是咱们打出来这个数据,嗯,那这个打出来这个数据的话呢,它这个顺序呢,你看还混乱了哈,嗯,你就看这标号吧,1234。诶,不对,我这上面没写换行的意思啊。
10:01
在这我加个换行。这儿啊,123456788,哎,没有九,哎,这儿有一个塔。哎,这呢是因为我们这里有这么多重复数据,它就只保留了一个啊,比如你这写个哎,年龄写个41岁,哎,那这俩又不一样,这时候保留两了就。哎,这不就这样了,就是驱虫的意思啊好,这呢是我们提到的叫诶筛选与切片啊,中间操作的一一部分啊。
我来说两句