00:00
好,那咱们接着来说下一个这个新特性,诶这个新性呢,新特性呢,叫强大的stream API,诶首先呢,这块提到叫stream API。哎,这个就相当于我们在Java层面呢,多了一波API,就这个意思,然后呢,强大就说呢,就是他可以做好多事儿,就这意思啊,那怎么叫强大呢,还是得通过我们提供的相关的类,以及呢这些方法咱们去体会,嗯,那首先呢,我们得先关注一下这个死这API呢是什么东西啊,哎,这块呢,有关于它的一个介绍,首先呢,提到了JAVA8当中呢,最重要的改变啊,第一个叫拉姆娜表达式,第二个呢就叫做词锥片。啊,这个死string API呢,属于API层面的一个变化啊,按说呢,这个比大家呢,刚才去听这个拉姆表达式呢要好很多啊,但是呢,这个死string apim的应用里边呢,呃,出现过函数式接口,那我们就想再用一下拉姆达表达式,所以这块呢,里边你看起来也会稍微有点吃力,主要原因还在于这个拉姆达表达式这块啊,这个本身API这个层面的话呢,其实还好。
01:04
啊,就是这个方法干什么用的,其实一说大家都能明白,那关键呢,就是说这个拉门的表达式还不熟啊,那我们看一下这个拉,呃,String API呢到底干什么?首先呢,它是定义在我们YouTube.stream这样的一个子包下,说把真正的函数编程风格引用到我们Java当中了,这呢是到目前为止对Java类库呢最好的补充,呃,因为呢,死追vpi可以极大的提供Java程序的成员的生产力啊等等等,这个这都比较空是吧?啊这个怎么来讲这个呢,我们嗯看列式吧,说咱们使用string API呢,可以对集合的数据呢进行操作,这个操作呀,就类似于我们SQL语言呢执行的数据库查询。哎,这个呢,我们讲完这个基础呢,大家马上讲的就是数据库了,那数据库呢,我们主体讲的就是circle,只不过呢,我们是先以这个my circle这样一个数据库来讲这个circleq的,Circleq的话呢,原来没有排到这个,呃,Tob这个排行榜上啊,后来呢,现在也排上去了,那一定要排上去,这个SQ呢还是挺靠前的。
02:08
那我们查数据库的话呢,大家都要用色扣,那大数据同学呢,大家也得写色扣啊,其中有一部分同学毕业以后呢,大数据的就要做数仓,那基本上天天就是写色扣呢。啊,几百行的circleq是吧,大circleq甚至上千行,嗯,可以感受一下是吧?嗯,这个就是写circle circleq呢,就是我们对数据库呢进行,呃,这个简单来说就是增删改查,而增删改查里边这个查询呢,做的就是最多的,也是最复杂的。嗯,那在对数据库中的这个表数据进行查询的时候呢,有很多丰富的操作,你要过滤呀,是吧,查找什么样条件的数据啊,这个就很复杂了,那在我们Java这个层面啊,这个数据库这块呢,你对应的那个叫表了,表里边有好多条数据,那在我们这个Java层面呢,那我们好多条数据,那就体现的是一个容器来装,这个容器呢,典型的就是集合了。
03:02
那么以前的话呢,我们对于集合当中的多条数据想进行一些过滤呀,规约呀,排序呀等等这样的一些操作的话呢,是有点空缺的。啊,是有点空缺的,那这个stringpii呢,就很好的对它进行了一个补充,从这个角度来看的话呢,提高了程序员的一个生产力啊,代码更干净,更简洁,呃,这个里边呢,其实也使用到了这个词,呃,拉姆达表达式啊,也会应用到这个里边啊,啊这呢提到说它提供了一种高效且业余使用的易于使用的数据处理的方式,不用呢,我们自己亲自去造了,直接呢,你调这个API就可以了。啊,这个为什么我们要用词string API这块提一下,这个很多时候呢,我们这个数据源呢,都是来自于MYQL和Oracle这呢,都是属于关系型数据库。比如说我们现在呢,要查这个是前端后台数据库,那我们在这个后台这块呢,要查这个数据,比如说用户呢,他想看一下,看一下这个最近三个月他的一些购买记录啊,这呢就有一些具体的条件了啊,诶把这个请求呢,发送我们到后台,后台这块呢,又去数据库当中去查,这个时候我们在查这个circleq的时候呢,就可以考虑上刚才提到的说最近三个月这样的一个过滤条件,那查完以后的话呢,我们返回过来这呢就已经得到的是最近三个月的,直接把这个数据给到我们前端就可以了。
04:24
相当于这个过滤操作,我们是在circle这个语言层面做的,并没有在我们这个Java层面啊,当然对于有一些这个数据库来讲,像芒果DB啊,Red啊这样的一些非关系性数据库啊,我们叫no s了啊,像这样的一些数据库的话呢,很多时候需要咱们在Java面呢进行处理,就是说呢,我们先得到这个数据,把这些数据得到以后呢,我们在这个Java层面呢,进行一个过滤,说只要最近三个月的。啊,那么要在Java层面做这个事儿,就得需要用我们的STEMAPI。啊,就是这个意思啊,那下边一个提到说stream它呢,和我们的collection集合有什么区别?
05:03
啊,有什么区别啊,区别的话就是collection呢,它是个容器,它是内存层面的一个容器来存储多个数据的,而我们的stream呢,他说叫与计算有关啊,就是我们来操作这个容器中的数据啊,你是想过滤还是想这个做一些映射啊,做一些规约啊,做一些这个排序啊,甚至说我们想查找一共有多少条记录等等这样的一些操作,它呢主要是来做计算的,所以呢,它是跟我们的CPU有关系的。因为CPU呢是做运算的,内这个内存呢是来存数据的,所以它跟内存打交道,STEMAPI呢跟我们的CPU打交道。啊,这个比较好理解啊,啊这个一句话概括就是集合呢,主要讲的或者操作呢,是数据啊多个数据,而stream呢,主要是来做计算啊,做一些什么计算,那就是下边涉及到咱们具体的这些方法的执行了,啊这些方法呢,都是干这个事儿的。
06:03
啊,下边呢,也有一些具体的注意,说呢,这个stream呢,它自己不存储数据啊,那数据呢,仍然是在我们集合当中,就像我们前面讲迭代器一样,迭代器呢是用来便利我们集合的,迭代器本身它也不存数据,那数据呢还是在集合里啊,Stream也同样的道理,说stream的话呢,它不会改变原对象,相反呢,它会返回一个持有结果的新的stream,类似于我们就在说这个stream是一个不可变的特性,比如我们想把你对应集合中的数据变了一变啊,比如把这个工资给它涨了,这个涨也是你返回的这个对象是涨以后的啊,原本的对象不变啊,就这意思。说STEM的操作呢,是延迟的。啊,什么叫延迟的呢?这呢就涉及到我们具体的这个执行过程了,STEM我们要想进行一些操作啊,刚才提到的这个规约呀,映射呀,过滤呀,排序啊,求个数啊,求最大最小啊等等,你要想做这些事儿,它呢分成三步。
07:06
那我们接下来讲解呢,也是分成这三步来讲,首先第一步创建STEM的对象。第二步叫中间操作,第三步叫终止操作,再画一个简图。首先呢,创建这个对象,根据某一个,比如说集合,其实数组也可以啊哎,我们得到对应的stream,然后呢,我们有一系列的中间操作,比如说你想过滤,你想做映射啊等等等等,诶最后的话呢,还有一个终止操作。比如你像求学个数啊,像便利呀,哎,像规约呀等等,这呢是一个终止操作,那什么叫操作是延迟的呢?就是你写了这几个操作,这一个操作呢,代表一个方法,你可以理解为呢,就是每次调完以后就点一下啊,再点一下,再点一下掉的这几个方法,那么对于中间操作来讲。你这块你点完以后呢,只要你没有调终止操作,它这里边儿呢,都不执行。
08:04
诶,只有你调了终止操作,它才会把这几个操作都执行了。啊,这也就是说呢,它是一个延迟执行的啊,是延迟执行的啊,啊这边写了说一旦执行终止操作,我们就执行中间的操作链,可能会有多个还产生结果,那一旦产生这个结果以后,你就终止了当前的这个stream对象就不能再回过去,我再想点一些中间操作了,因为它已经终止了,就不可以再被使用。啊,其实咱们刚才说到关于stream的好几个事儿啊,那接下来呢,咱们就一一的进行一个解释啊,关于第一个是吧,这就造对象的事儿,这是咱们落地呢,要写的这个API,写的这个代码了啊先把刚才我们提到这几个点呢,哎,稍微的总结一下。诶,咱们放到这个JAVA3下面啊。诶,关于我们叫STEMAPI,它的一个测试。
09:07
那回忆一下,咱们刚才讲了几个事儿啊,首先呢,我们说这个stream呢,哎,它强调的是或者关注的是。哎,对这个数据的一个运算啊,哎运算它呢,是与我们的这个CPU打交道。哎,而对应的我们这个集合,哎,它呢关注的是数据的一个存储,哎它呢是与我们的这个内存哎打交道的,这是第一个点,诶第二点刚才呢,提到了这样的三个事儿。这三个。诶,CTRLC下。哎,提到了这样三个点啊,诶不会改变这个存储的元素,哎,这个不会存储数据,它呢主要是做这个运算的,诶它的操作是延迟的啊这样一个过程,诶什么叫延迟的,刚才咱们提到了一个说stream API或者叫STEM这个结构啊,它的一个执行流程,哎这个执行流程,哎首先第一步。
10:14
第一步是不是就是stream它的一个实例化呀,哎,这第一步,然后第二步呢。叫一系列的中间操作,哎,一系列中间操作啊,比如说我们做一些过滤操作呀,哎映射操作呀,啊哎等等吧,所以我们一会儿讲的时候呢,你能看到有好多啊,然后呢,第三个。对叫终止操作,诶叫终止操作,诶这呢是我们执行的这样一个流程,然后第四个呢,我们做一个说明,诶刚才呢,提到了这个点。诶提到这个点啊,首先呢,是这个中间操作呢,它是一个操作链,可以对数据源呢进行这个处理啊,这是一个链可以有多个的。
11:02
哎,这是第一个点啊,然后第二个点呢,这个提到呢,这个操作是延迟的,什么意思呢?就是我们只有去执行终止操作的时候,他才会去接着执行我们的中间操作链,要是你不执行这个终止操作呢,这个中间操作链就不会执行,这叫延迟的事儿,诶这个终止执行完以后呢,也会产生一个结果。产生结果以后呢,它就不能够再被使用了,尤其大家需要注意,最后这个事儿不能再被用。那IG呢,你如果还想用,你必须呢,从头再去造一个stream,哎,得这样子。好,关注一下这样几个点行,这呢就是关于我们这个stringpi的一个概述,那接下来呢,我们讲解stringpi的话呢,就从这三个角度呢去讲啊,讲完终止的话呢,那也就完事了,哎,就是这样的三个内容啊。
我来说两句