00:00
好,那下边呢,我们就进行这个讲解,那咱们这块呢,定义了一个原文件,这个原文件呢,我们主要呢,就来来测试一下我们string mypi的一个实例化啊,诶测试它这个实例化相当于就是造对象了,那么它创建对象有几种方式呢?这呢我们提到有四种方式。方式还挺多,第一种,第一种的话呢,是通过集合。诶通过集合呢,来进行创建,来我们进行一个测试,行,那通过集合创建呢,这里边儿提到了两种方法,那这两个方法的话呢,我们都来演示一下。这两个方法放在哪了呢?它就放在集合里了,那集合像list list是一个接口,所以你看它里边放的都是默认方法,这是我们JAVA8里边儿关于接口中提供默认方法了,这呢,我们用的也是这个默认方法,行,那首先首先呢,咱们得先拿到一个集合,那不妨咱们就用这个添加过来的这个,哎,Employee data调这个方法就拿到了一个集合,就以它为例说明一下,好,所以说这块我们直接调一下叫employee data.get一下employees。
01:16
啊,得到这样的一个employees,就用它吧。那拿到它了,那接下来拿着我们这个集合,咱们呢去调一下叫stream,哎,那alt enter,我们此时呢,就拿到了一个stream。这样呢,就相当于拿到这个对象了。那比较简单啊,那很显然我们现在调的是list当中定义的方法,List这个它蹦到这儿了啊,这个在collection定义下了,定义了,定义了直接list就可以用,这呢是接口,咱们现在用的呢,就是接口中的默认方法。啊,这个接口中的默认方法,你不能直接拿接口这个接口本身去点啊静态才行,所以咱们这呢,其实用的还是它具体的一个实现类的对象去点的啊行,那接下来说呢,我们调这个stream呢,返回的一个叫顺序流,还可以返回一个叫并行流啊parallly啊stream,那我们通过这个employees点啊,我们叫啊parallly stream这块我们得到的是一个,哎,这叫并行流。
02:21
那这两个流有什么区别呢?就是我们这个得到的这个集合啊,这个流里边这个我们要是拿一会儿,咱们不是讲中间操作嘛,咱们拿数据的话呢,它就会按照你这个集合中的这个顺序来。本身的你这个也有序啊,那要并行的话呢,哎,它就相当于是哎有几个就像线程一样啊,同时的去取这个数据顺序呢,就不一定是这样的了啊,这叫并行操作的意思,OK,这个是关于我们通过集合哎获取它的一种方式啊,比较简单,然后第二种方式集合呢,是我们一种容器数组也是,所以通过数组呢也可以。
03:07
我test一个二。行,那通过数组,那数组的话呢,用什么方法呢?这呢我们提到在ari这个工具类当中提供了一个stream的一个静态方法。啊,CTRLC一下相当于咱们调用的是。哎,调用我们ari这个类的静态方法做好,那我们来做一下,直接呢,咱们就来调了啊说ari点,哎第二类方法呢,叫做stream,那接下来我们就需要提供一个具体的数组了,哎,常见的这些类型都能满足啊,你要是想放一个特别的数组,比如说你自定义类型的数组也是OK的啊,它也有这样的支持啊,这样的一个情况。那咱们这块呢,可以整的稍微简单一点,比如说我这块呢,就定义这个int型的数组了。
04:04
哎,这个位置我就123啊456啊行,那此时呢,我们把这个AR呢扔进去,哎这呢就帮我们创建了一个这样的stream。就它这个string呢,因为咱们扔进去的是一个int的,所以它返回的你看是一个int的stream,诶我们在PPT里边这有写,说我们看我们扔进的如果是一个它返回的是这个类型的,如果你要扔进去的是一个自定义类型的。返回的就是个stream啊,通过这个它的泛型指明你这个类型啊。啊,那我们也举个例子啊,比如说咱们就以咱们造这个employee吧。啊,这呢是一个一一等于new一个employee,哎,不妨我这块呢这个写。写写一个这个属性啊。行,这个我们用这个构造企业OK啊,这个来一个二啊,这个呢叫Jerry,这个叫一二,现在呢,我们创建一个啊叫employee的一个数组啊,A1等于又一个。
05:09
Employee。哎,这个里边我们写个一一写个一二啊这样啊。这个叫动态还是叫静态初始化,对静态初始化就直接把值都附上了,对吧?行,然后的话呢,我们通过这个叫A。第二啊叫调stream方法,把我们这个AR1呢,你扔进去,哎,我们al enter一下,哎返回的,你看就是这样的一个stream,哎,那此时的话呢,我们这个类型是通过stream的这个泛型体现的。啊,发行体现的好,这呢,就是我们说的这个通过数组的这样一种方式创建啊,咱们创建呢,就没有再去我去双击去执行了,因为咱们还没有后续的中间操作,你也看不到什么效果啊,那这是我们说的第二种方式,然后第三种方式。第三种方式呢,提到我们stream这个类本身,它也可以去呃这个创建它的这个实例,呃调的一个静态方法叫做恶。
06:10
啊,这是我们的这个方式三。好,那我们直接呢来写啊,Stream of of这块的话呢,你可以写多个值,就是把这几个值呢放在一起,其实呢,也相当于构成了一个容器了,然后我们一会拿这个STEM对象呢,就可以操作这个容器,诶比如我这里简单一点就写个123456这样啊,那你看我们这里边放的它这个是T啊,这个T的话呢,它其实哎我们放的这个12345,其实就认为是包装类了。不是咱们这个int了,我们al enter一下,哎,你看我们得到这个是它确实呢,看做是包装类的对象,不是咱们这个int型啊,OK,这就完事了啊,哎,就是说白了呢,就是这个stream呢,它就是来操作一个容器的啊,就是跟我们这个集合呢去打交道的啊,他呢要跟集合打交道啊,对数据做运算嘛,而且是多个数据一个就没啥意思了啊。
07:15
行,这是我们说的这个第三种方式,还有一种方式,这种方式呢用的比较少,咱们了解一下就可以。啊,涉及到呢叫创建叫无限流啊前面呢,我们对应的这个多个数据都是有限的,下边呢,它内部提供了两个方法,这两个方法呢,可以创建这种叫无限个元素对应的这种stream,咱们了解一下。粘过来,哎,对应的我们都给它注释一下啊,先来看一下这个方法,它叫做迭代。往前一点啊,这个它这个格式粘过来以后呢。
08:01
哎,这样是不是稍好一点。行,然后先看第一个叫迭代,迭代,你看也叫ter啊,Ter迭代我们这里边呢,放了一个种子叫C的啊,然后接下来呢,这个呃,这呢是一个接口了啊,其实它就是一个函数式接口,那这个接口的话呢,你要不熟,其实呢,我们在上面呢,稍微见过它啊。嗯,在这个位置的时候呢,它就是它了,就是它啊。哎,没见过的,一会儿咱们看下,也可以举个例子,此时的话呢,我们还是使用这个叫STEM点啊,它这不是迭代嘛,叫ter啊,来个种子,咱们比如说现在做一个事儿,嗯,咱们呢去便利一下,这个从从谁去开,从谁开始呢?嗯。这个我们这样说吧,便利前十个,嗯,偶数吧。便利前十个偶数。
09:00
行,你看这样,首先呢,我们这给个种子,就是最初呢,先让它是个零,哎逗号后边呢,还得需要填一个呃,具体的一个这样的一个参数了,哎,我们把光标放这儿啊,等一秒钟,或者你直接点个F2也可以啊,就能看到填的是一个它它点开说这个结构呢,它继成了function function咱们说过了一个函数接口,只不过呢,它是一个特殊的function function正常是T啊二。而他呢,这个放进去的这个值和返回的值都是T啊,它的这个方法呢。这没写了啊,相当于这里边呢,调的咱们不是说的是apply方法嘛,A apply方法呢,这放的是T,返回是二,那对于它来讲呢,它反的也是个T,那那在这里边呢,可以做的事,比如我放的是一个T,哎,我返回的是一个,比如说T加上一个二。啊,初始值是零。OK吧?哎,这样的话呢,我们就得到了一个stream,但是这时候呢,注意它这样返回以后呢,拿着这个值呢,又往里迭代了啊,那就是再加二再迭代再加二,不停的去加二,那这呢可不止十个了。
10:09
所以咱们这块呢,就呃要执行的话,这个就咱们想看下效果呢,这就用到后边这个所谓的终止操作了啊,这个终止操作呢,就是for each了,For each的话呢,里边需要填一个消费者,就是你放个东西进去,它就不出东西了,典型的不就是那个输出吗。输出不就是print LA就放进去不出来嘛,是吧?哎,所以这块呢,咱们,哎其实你可以写成一个拉姆达表达式的形式,我这呢就直接呢写成哎方法引用了。哎,这样子写了,这个时候呢,我要去运行这个,它就停不下来了。你看是吧,那停不下来了啊,所以呢,我们看到它确实是一个无限流,那在这个位置呢,我们给它加上一个限制,就是我们要讲的中间操作中的一个,我就想要前十个啊。
11:03
哎,这呢,就是前十个。哎,这样一个情况啊,简单的大家体会一下就行啊,那这呢,其实咱们借用了一下中间操作,这呢也借用一下这个终止操作,否则的话呢,你看不到它这个效果了,那接下来呢,看一下这个也是做一个了解。这呢叫generate生成的意思,哎,我们还是用stream点啊,这呢叫generate,需要填一个叫supplier啊。Lier呢,就是对应的,你不往里放东西,它出东西出东西。比如说一个典型的呢,咱们这个取一个随机数,哎,它就是我们又用了一个方法引用,这是用一个类来调的啊,因为这个方法是一个竞赛方法了,这个呢又是一个很多的情况啊,你要点这个for each的话呢,又太多了,咱们这块呢也是哎让他呢,哎前十个哎这样一下。好,我们执行。
12:00
哎,就是这样的,哎,输出了十个随机数,哎,你要不加这个随机呢,又多了,停不下来了,哎所以这两个呢,都是生成的,这叫无限流啊,就是可以理解为呢,就是帮我们去造数据,当大家呢,有需要说我要造一些数据,造一些随机数,造一些这个数啊,你可以考虑用我们这个stream啊来做啊成这呢就是我们提到了关于stream的第一个操作,就是关于它的一个实例化。啊,这个大家主要关注也就是前三种,还是看一下你这个数据本身是以什么方式呈现的,是集合用第一个数组,第二个什么也没有,哎,线造出来一个,你可以用第三个。这样啊,第四个就是你特殊情况要造数据啊,采用它好,这是第一个问题。
我来说两句