00:00
诶,我们接下来呢,就讲这个叫做第四个叫做强大的STEMAPI,我们说学了这个以后呢,之前大家也看到了,我们这个操作这个数据是不是就是非常方便的,对吧?就是说就如同操作这个circle,如同写circle一样,操作我们这个账号当中的数据,对吧?那么我们过来看一下,那么首先了解一下我们这个string,它翻过来的是不是就是硫的意思啊,对吧,我们说硫,但是呢,说只要提到流的概念,这个硫呢,就跟我们说之前只要是硫,它那个概念几乎都是类似,是不都是说完了都是用于操作数据的呀,原来咱们讲的I流是不是也是传输数据的,包括我们说平时那个了解到什么,什么媒体流啊,多媒体流啊,是不是也是用于传输一些数据的呀,对吧,但是这个流只要是流的概念呢,都是跟数据有关的,但是咱们现在说的这个stringam流跟我们原来说的那个IO流还是不一样的,听懂吧,那么过来呢,咱们再进一步的稍微的。
01:01
啊,了解一下这个流,那么比如说这个流呢,它也是对数据进行操作的,只要是流的概念呢,几乎都是类似的,都是做一些数据传输操作的,对吧,但是呢,咱们现在这个流呢,跟咱们IO流还是不一样的啊对吧,还不还不是一样的,那么相应的呢,说这有一个是数据的操作,对吧,你行。嗯,所以我们说只要是流,那是不是都是对数据操作的呀,那要操作数据是不是都得有个数据源对吧?那它首先都得有一个叫做数据源对吧?那么当然我们现在的这个数据源可以是什么呢?可以是叫做集合,也可以是数组,是不是,那么现在也就是说我们是不是可以对集合或者是数组中的这些数据是不是进行一些操作呀?那么做一些什么操作呢?我们首先流对这些这个数据圆中数据进行操作的时候呢,我们说说白了也类似于是不是一个数据的传输啊,那想完成数据的传输,你是不是也得创建一个用于传输数据的管道,对吧?说也得有这么一个管道,然后注意,那么现在这个流呢,它不一样在哪呢?它在这个传输的过程当中呢,在这之间可以做一系列流水线式的。
02:28
中间操作说一系列叫做流水线式对吧,一系列流水线式的中间操作,比如说什么样的中间操作呢?比如说在我这个传输的过程当中,我是不是给他来个过滤呀,对吧,我来个叫做筛选呢,切片呢等等等等,做一系列流水线式的中间操作,但是做完这些中间操作以后,大家切记的是什么呢?原来的数据源是不会发生改变的,对吧?取而代之的是它会产生一个新流,对吧,说会产生一个叫做新的流,而原来的这个数据源是不会做任何改变的。
03:21
这个听懂们对吧,就是说首先呢,说白了就是对这个流API stream API的一个操作,那无非也是三步,首先我是把这个数据源集合或者数组转化成流啊,然后对这个流做一系列流水线式的中间操作吧,做完了这些中间操作以后,它将产生一个全新的流,而跟原来的数据源是不是没有任何的关系,对吧,说数据源是不会受到影响啊,对吧,就类似于什么呢?就类似于我们说原来我们说做一个什么文件的复制,说我把这个文件复制成另外一份,对吧,我们说把这个文件复制成另外一个文件呢,但是这个原来的文件是不是不能变就复制不能变呢,对吧?那现在呢,几乎也是这个道理,对吧,我们说说白了也是对数据进行操作,那首先三步,第一步我得把这数据源转换成流,转换成流以后做一系列流水线式的中间操作,最终产生一个心流,而。
04:22
原来的数据源不会受到影响。这能听懂啊,对吧?那么这就是流的一个操作,那么说说白了,这个流是什么意思呢?对吧,我们说首先它这个流,那么说集合,那么它讲究的是数据,对吧?而我们现在说的这个流,它所讲的是计算呢,他说把这些数据经过一系列流水线上的中间操作以后,最终是不是产生一个心流啊,对吧?那这就是我们说流的一个作用对吧?说呢,流呢,它是数据渠道,用于操作数据源,这个数据源可以是集合以是数组,然后所生成的元素序列,然后集合讲的是数据,硫讲的是计算,大家要注意的是,也就是硫自己它是不会存储元素的,这是第一第页呢,Stream不会改变源对象,就原来的数据源不会发生改变呢,相应的取而代之的是一个新的流,或者说叫持有结果的新。
05:26
丢对吧,然后呢,STEM操作是延迟的,这个延迟呢,咱们一会给大家演示一下,这能理解吧,好了啊,那么说说白了,整个STEM的操作,那么就三步,第一步得到一个STEM,第二步是不是一系列流水线是中间操作呀,对吧,比如说过滤呀,映射呀等等,对吧?那么第三步我们最终是不是要的结果呀,我们来个终止操作,产生我们所需要的结果,一个或多个的结果。搞定了啊好,那么接下来呢,咱们就要一个一个的来。
06:02
首先来个叫做STEMAPI,一说对整个流的操作对吧,一叫做stream对吧?STEM的三个操作步骤,那无非就是第一个我们是不是得首先想办法获取一个STEM,创建一个stream啊创建流,第二个那叫一系列流水线式呢,叫做中间操作,最后呢,我们是不是来个叫做终止操作,终止操作或者也叫做终端操作对吧?操作是不是产生我们所需要的结果呀。对吧,对吧,产生所需要的结果,那么一步一步来先说第一个对吧,说如何这个叫做创建,创建这个STEM对吧,那么我们说实际上创建STEM呢,它有这个叫做四种方式,首先第一种它可以怎么获取呢?它可以通过对吧,说可以通过collection collection什么呀,是不是企口集集合空调跟接口啊,对吧,它可以通过collection系列集合的提供的提供的一个什么方法呢?叫做stream方法,或者叫什么streamam或或play。
07:27
对吧,Parallel stream,或者通过parallel stream。叫para吧,叫parallel stream。我瞅一眼啊。呃,Pre RA,对,Pre是pre啊,这个parallel stream是这两个方法啊,可以获取流,实际上第一个呢叫获取的是串行流,第二个获取的叫做并行流,至于什么是并行流,咱们最后再说听懂吗?对吧?那么接下来呢,我们就可以搞一个叫做list,比如说来个string叫list,等于用一个a list对吧,我们说考系列集合有没?我说list set是不是都有啊对吧?那么这样的话呢,我就可以通过叫做list点有个叫做stream方法吧,对吧,它就可以得到一个一个硫,这个硫注意是不是也带泛形啊对吧,也可以在泛形,那么这个呢,就是获取流的第一种方式。
08:36
这能搞定吗?对吧,那我说拿到了这个流,我是不是就可以做一系列流水线,是终端操作,最后生成结果呀,对吧,那么咱们是一步一步来,先说得到这个牛,得到牛之后呢,才能再继续操作,对吧,先说第一步。这没问题吧,对吧?那么再说第二步说二,那么我还可以通过什么呢?通过一个叫做哎A瑞对吧中的A瑞中的叫做静态方法,也叫做string,也可以获取一个数主流对吧,获取数组流,也就是说比如说来个a race点上是不是叫做streamam啊,注意看这里是不是有很多重载方法呀,可以把大数组转成int long数组是不是都可以啊,当然你也可以有泛行T对象的嘛,是不是任何对象都能,任何对象的数组是不是都能转换成流啊对吧?那么说就用这个,那这个时候呢,它需要一个数组,我们就来一个数组,比如说叫做随便来吧,你随便来个employee吧,是不是employee的速度啊,等于用一个employ employee PL。
09:49
OE对吧,长度为十对吧?那么我就可以把这个数组呢,转换成一个使string同时带泛行的,那么这样的话就得到了一个零对应的数据源,是不是就是这个数组啊,我就可以对数据源中的数据是不是进行操作呀,对吧对吧?那么这样的话呢,就是第二种获取流的方式,那么接下来第三种,第三种我们还可以通过什么呢?通过这个静类中的叫做静态方法,也叫做呃,Of对吧,Of方法,Of方法呢,也可以叫做创建流对吧,也可以过去流,比如说叫做stream类,点上是叫of啊对吧,当然第一个呢是一个对象,第二个边着点代表是不是可变参数啊对吧?那么比如说来个叫AAA呀对吧,来个BB呀,来个CC呀。
10:49
对吧,这样的话呢,它也会给我得到一个硫,也带泛形的STREAM3,那么对应的数据是不是就是这些东西,不是吗?对吧?那我说既然这是可变参数,我能不能传过来一个数组呢?是不是也可以啊,对吧?那这是创建流的第三种方式,那么有了第三种是不是还能有第四种呢?那就第四种,第四种什么呢?我们可以叫做创建,叫做无限流,无限流无限是什么意思啊?
11:28
哎,没有限制,没没有下限的也可以,这个解释可以对吧?对无限就是没有下限的意思,对吧,就是没有穷尽,是不是这意思啊对吧,没有穷尽,那么呢,对无穷尽,那深的呢,我们创建的方式有两种,怎么了?好吧好吧,我了解了对吧,可以。今天你们在群里发的就是你是吗?啊,长得挺像我是吧?啊不是你吗?像我不是我那个眉毛,眉毛不是你的眉毛吗?还是你的啊,就是蜡笔蜡,蜡笔小新那个是吧?好了,我那叫创建无限流,那么第一个呢,那我们说叫做生成对吧,第一个叫做是第一个叫做迭代吧,第一个是不是叫迭代啊对吧,第一个来个迭代,迭代的话呢,只需要通过这个叫做string点上是不是叫啊对吧,对吧,因为Internet里边第一个需要一个seed,这个是什么意思,是不是种子啊,对吧,它需要个种子,后边需要个叫做unit operator对吧。
12:59
Unitary operator是什么东西来着?哎,什么叫一元预算呢?对吧,我们说忘了呢,没关系,我们是不是可以看看呢?UI unitary UN a对吧,叫做operator,走过来看一眼呢,所以这首先看到这这是一个啊函数是接口对吧?然后它继承数方式呢,对吧,还义就是继承方式,然后传过去个T和T,也就意思是过来这是不是T,返回的也是T对吧?那也就是传过去的是T,返回的是不是还是T呀,对吧?那就是说首先一个种子,种子呢,说白了就是一个起始值,那么然后呢,接下来呢,你传一个一元运算呢操作对吧?那是不是拉姆达表达式啊,比我传过去一个X,然后要运算X加二分号结束,那这样的话呢,它会给我生成一个string,里头放的是in teacher对吧,然后。
13:59
用了这叫STEM的第四种方式,那这样的话呢,它会就产生一个无限流。
14:06
听到没注意,现在单纯的有流呢,它是没有任何的效果的,听懂吗?我们是不是只有做了中间操作和中止操作以后才会有效果呀,那现在为了给大家演示一下,咱们是不是来个终止操作,让大家看看效果啊,对吧?说什么是终止操作呢?比如说我要迭代便利一下,看看这个无限流中到底有什么东西,注意看这里是不是需要一个consumer,现在consumer我们知道啥吧,对吧,叫做消费型双肺型,我是不要来个这个说方法引用对吧,对吧,方法引用。那么这样的话呢,我们这个就不用接收了,或者是这样就行,首先是得到这个礼啊,对吧,为了让大家看效果,那我就STREAM4拿到这个礼以后,我是不是来个服务意识啊,然后呢,来一个叫做tta来这项呢,大家看看效果右键。
15:01
运行注意看是不是一直停不下来啊,对吧,我得点对吧,那么相应的看上面那个最后那个是没答印完啊,这不都是偶数啊对吧,什么0246802468对吧?那也就是说从这个种子就开始啊,然后开始是不是叫X加二的操作,那这是个偶数对吧?那这就是产生一个无限流,按照我一元运算的这个规律对吧,产生一个无限流,这个就叫做迭代。听懂吗?对吧,那我说有的时候那我不想要这么多,我是不是就想要前十个呀,对吧,那我们说注意我们是不是可以来点中间操作对吧?那比如说给大家稍微演示一下,比如说这时候呢,我再来个叫做limit,我要来十个对吧,然后呢,再去点上是不是fair意啊,就干脆给它写到这得了,是不是再去点上负意,那这样的话呢,再去右键运行,那是不是只产生十个对吧,对吧,首先Internet是产生无限流,那么这个时候我做了中间操作和终止操作以后,是不是就产生一个新结果了呀,对吧,就有结果,那么这就是第一种创建无限流的方式,叫做迭押代。
16:20
那么相应的还有第二种创建流的方式叫做什么呢?叫做生成,对吧,生成,那怎么个生成呢?还是通过这个STEM点上一个叫做generate第吧,Generate这里边要需要一个参数叫做pperpplier,是什么东西,是供给啊,就是产生对象的吧,是他可以无限的是去制造对象呢,对吧?那比如说现在呢,咱们来个简单一点的,我们就来一个让他帮我们产生一个随机数可以吧,Ma点上random干脆就产生个随机double得了,是不就产生一个随机的double的啊,大于等于0.0小于1.0的吧,它是不是给我得到一个心流,得到流以后,我可不可以做一些中间操作呀,对吧,我们先看看效果再再做,可以做中间操作,是不是也可以有终止操作啊,先来个for each,然后打印for line,先看看效果。
17:20
是不是无限流?是无限产生随机数对吧?无限产生随机数,那么相应的呢,我是不是也可以保留几个呀?我比如说要来limit米来五个对吧?右键运行是五个,上边十个int,下边五个double。对吧,那么以上这四大种就是我们说创建STEM的四种方式,说有了这个stream,我们是不是就可以进行一系列流水线式的中间操作,然后最后利用中等操作可以生成我们所需要的一些结果。
18:01
能看到好了,那么这个F10。
我来说两句