stream on either bank of the stream stands rows of willow trees。
粉丝3065获赞2.2万

好,这个单词什么意思?大白, ok, 不知道,是吧,那我老师教你一个非常好用的方法。 ok, 秒记他啊,这个单词我们可以联想到这个词 dream, 认识吗? 梦,哎,很好,梦,对吧?梦想在 s 后面的这个 t 也要浊化上面一 d, 所以他读音叫 three dream。 好,给啦。对,是这样,很好,所以是梦。干嘛死在小溪里面。所以这个单词的意思表示小溪啊。 ok, 记住了吗?没了, ok。

亲爱的同学们,我们今天看到 string 这个单词,用好这个单词能够增加你作文的写作的美感。首先我们看到它作为名词的时候,大家可能都认识它有小河小溪流的意思,而且是个可数名词。 比如说这样一个句子, there is a small stream at the end odegarten。 在这个花园的尽头啊,有一条小河,这个时候我们可以用 stream 作为名词, 但是我更希望大家记住的是他作为动词的时候的用法。首先他可以表示的是某一群人朝着一个方向不断的在移动,比如说可以理解为川流不息,或者是理解为鱼罐而行的意思。 比如说这样一个句子, people stream across the bridge。 就人们啊在这个桥上面呢, 川流不息。所以下次你可以用 walk across 的时候,从桥上走过去的时候,你可以把 walk 这个字换一下,换成 stream, 这样的话你的作文表达立马就给人一种画面感, 表达立马就高级了。所以 people streamed across the bridge, 桥上的行人川流不息, 但我更喜欢,你记住呢,是他的第三个作为动词的用法。在神奇书屋的第四本书寻宝加勒比的 chapter two 第二章的第一句话 讲到了这样一个句子, jack felt hot sunlight streaming into the tree house。 这杰克呢,感觉到这种火辣的这个阳光呢, streaming into the tree house, 这就是撒 进了这个树屋。是不是所以 stream 在这里作为流动,作为动词,或者是理解为撒进去的意思?我们来看一下杰克呢,感觉到热辣的阳光撒进了树屋,所以给人一种非常好的画面感。 stream 作为动词的用法, ok, 最后我们来总结一下,今天我们重点讲到了 stream 的三个意思,第一个是小河小溪流的意思,第二个是作为动词可以理解为朝着一个方向运动,可以理解为川流不息。 第三个呢,可以理解为流动撒进去的意思,或者也可以理解为飘动, ok, 你学会了吗?希望我今天的讲解能够对你有所帮助,如果你都听懂了,别忘了为老师点赞收藏加关注, thanks a lot!


这段代码你们觉得应该怎么调试呢?这是加了吧的这个流操作, stream 的流操作。这种代码其实日常我们调试的时候很难调试啊,基本上调试不了,你蹲在这也没有用,对吧?今天我教大家一招啊, 我们可以随便端在这,或者是端在其中的某一行都可以啊。我们把断点调试集中起来,然后你们看到这个标志没有? 点击,哎,看到了吗?这是初始状态,然后这是你的 fute, 对照一下做的 fut 的操作,然后他进行一个迈步, 最后形成的最终的一个结合,然后这底下还有一个 flag model, 一个扁平模式,可以一目了然吧?一目了然 一共多少个集合?他是怎么变化的?变化以后他进行迈步的转换,最后再进行一个呃,最终的一个集合,嗯,这样就很清晰的变换的一个查看了,你学会了吗?

好,那么接下来呢,我们就开始学习扎尔巴推出的另外一个核心叫做 stream api, 那么对于扎尔巴来讲,两大核心,一个就是拉姆达表达式,那么另外一个就是现在这个叫做强大的 stream api, 那么拉姆达加上这个 stream api, 我们就可以向 啊斯尔口一样去操作我们账号中的数据,我们学学就知道了。那么什么是死菌 ma api 呢?我们首先得先了解一下,对吧?我们说 两大核心对吧,一个是拉布达表达是,另外一个就是这个 steamapi, 也就是说在扎巴点 uto 包下,又多了个 steam 包,下边的一些给我们提供的一些内裤供我们使用。那么呢, steam 大家之前是不是接触过 steam? 是不是要留的概念呢?是不是留的概念?咱, 咱们在 i o 流中是不是学过了解过 stream 啊?哎,但是呢,我们说,虽然说一提到这个 stream 流的概念,大家就知道啊,它是处理数据的一种方式,那么这个处理数据呢?跟咱们之前那个 i o 流啊,处理数据方式很类似, 但是呢,略有一点不同的地方,那么什么是这个 steam 呢?他也是处理数据的,听懂吧?哎,都是处理数据的,什么这个呃 i, 无论是咱们之前学的 i o 流也好啊, 还是比如说咱们平时了解的这个多媒体流也好啊,还是现在的这个啊 stream 啊,就是这个张二八出的这个 stream 啊,流也好啊,实际上我们知道这个流啊,他都是处理数据的啊,那么我们就来一个这个画的画的像一点点啊,画的像 上一点点啊,都是这个处理数据,那么我们说了,只要想要处理数据,那是不都得建立一个用于传入数据的管道啊?实际上是一样的,那么我们张二八中的这个 stream 呢?你也处理数据,那既然要处理数据啊,他就得有一个叫做数据 源,听到吗?要想处理数据,他就得有一个数据源,那么在我们这里数据源是啥呢?要么是集合,要么是数组等等啊?数据源可以是集合,可以是数组, 可以是集合,可以是数组等等。然后接下来我们有了这个数据员,也就是有了数据之后,我们是不是该,对吧?完成这些数据的传输啊?要想完成数据的传输,你是不是也得建立一个用于传输数据的管道啊?其实是很累。 是的,但是大家注意咱们这个张二八中的这个 steam 啊,他在在对于数据的处理上,在这之间呢,他可以做一系列流水线式的中间操作啊,可以有 一系列叫做流水线,是流水线,是的中间操作,在这个传输的过程中, 可以完成一系列流水线式的中间操作,比如说我们对这些数据过滤呀,映射呀,切片呐等等等等。一系列流水线式的 这个中间操作之后,他注意最终产生一个全新的流,他是产生一个新的流,跟原来你的数据源呢,是 没有任何关系的,听懂吧?哎,就是数据流吗?流的概念都是数操作数据,原来的 i o 流,是啊,多媒体流,是现在咱们这个 steam apex steam 这个流也是操作数据的,只不过不同的地方在于,我们首先得有个数据源,数据源此时是集合或者是数组, 原来咱们的数据是不可以是一些文件、图片、视频、音频等等啊?现在的数据员可以是啊,集合或者是数组等等啊,都是用于纯数据的。然后紧接着呢, 我们会对这个数据源把它转换成流,转换成流了以后,我们可以在这个流之间做一系列流水线式的中间操作,也就是说对这些数据进行处理。但是不同的地方在于,对吧?处理了之后啊,他产生了一个全新的 流,跟我们原来的数据源是完全没有关系的。听懂这意思吧,就如同原来咱们做个文件的复制是不是也一样啊?比如说我把这个文件我复制一份,复制成一个新的文件,我改变原来新的文件,对原来新文件进行处理,原文件是不是并不会受影响? 朋友们,哎,所以说流的概念呢,都是对于数据的一些操作,所以说通过这个我们能了解什么呢? 了解到什么呢?说流,他到底是啥呀?实际上集合讲究的是数据,那么流讲究的是 计算啊,对数据进行一系列流水线式的中间操作以后,产生一个全新的流,对应的也就是全新的数据,而跟原来的数据源是没有任何关系的, 听懂吧。哎,所以说死俊吗?自己是不会存储元素的,死俊不会改变原对象,相反他们会返回一个持有结果全新的流。 然后呢, steam 操作是延迟,这个延迟呢,咱们一会再给大家说什么叫做延迟?好吧,哎,那这就是流。那么在这个张二发中啊,使用这个 steam 呢,只有三步,第一步,我们得创建一个流,对吧?哎,就是通过一个数据员,要么是集合,要么是数组获得一个流, 拿到了这个流,我们就可以进行一系列流水线式的中间操作啊,然后有了这个中间操作,对这些数据进行处理了以后,我们会啊,来个终止操作,或者也叫做终端操作,然后产生一个全新的结果啊,也就是你有个数据员,对吧?我要 把它转换成流,转换成流了以后,我们可以过滤呀,映射呀,切片呐等等等等一系列流水线似的中间操作,然后利用一个中指操作,产生我们所需要的结果,所以说整个流的使用就围绕这三步即可, 听懂这意思吧,哎,怎么过来啊?我们就一步一步来吧,不就一共三步吗?一步一步来,叫 stream api test 一吧。 说呀,对于流的操作一共就三步,对吧?关于流的操作,流的操作呀,就三步,第一步,那就是创建一个流,通过数据源创建一个流。 第二步呢,那就是一系列流水线式的中间操作,最后呢再来个中指操作操作,然后得到一个最终 结果。那么咱们先说第一个,我们该如何去获得一个流,或者叫创建一个流呢? 叫做创建流。那么创建流的方式啊,人家给我们提供了四种方式,这我们是不是必须会啊?那么第一种方式呢,就是通过叫 conlax 是不集合呀? conlax 系列集合提供的一个方法就叫做 stream 方法啊, 就可以获得可以创建一个流了,当然他还有一个方法,还有个方法也可以叫做 parallel p a, r, a, l, e, l, 对吧? stream, stream, 那么这个方法呢,获得的是一个 并行流,前面这个方法获得的是一个串行流,并行流咱们之前是不是介绍过了呀?对吧?底层使用的是 foculate 框架 对吧?采用的是工作窃取名模式,说白了就是这是个单线层的流,这是个多线层的流,听懂吗?嗯,就这么个意思。 然后呢,那么我们就可以试一下啊,那比如说我们现在啊,有一个集合叫 list new, 一个 release, 当然集合中是不是有可能有数据啊?那么此时你只需要 list 点 stream, 这样的话就获得了一个流了, 这样就拿到了一个流,听懂吧?当然有了这个流,接下来我们就可以对这个流中数据进行一系列操作,然后得到结果。当然咱们是不是得一步一步学啊?后两步还没有呢,听懂吧?哎,咱们先说怎么去获取一个流, 搞定吧。哎,那这是第一种方式,通过 connection 系列集合的 stream 方法。 connection 系列集合是不是都有啊?正儿八经出的新方法,好吧, 卡莱克这里边有 list 系列集合有吧,赛特系列集合是不是也得有啊?都有。那么第二种方式呢,是通过 arist arise 类中的类中的一个,叫做 stream 方法。 stream 方法也可以创建一个数母流, 创建一个数组流,那么就搞一个数组吧,一个 integer 的数组,用一个 integr 的数组,比如说长度是十,对吧?然后呢,通过 arrays 点叫 stream stream 啊,然后呢,将这个 array 这个数组呢,把它转换成 流,然后有了这个流,我们就可以后续中间操作,中指操作了啊,叫做啊, arrays 的一个 stream 方法, ok, 那么第三种 方式是什么呢?通过通过 stream, stream 类中的 stream 类中的一个叫做 up 方法,也可以获取个流啊,并且它这个静态方法 stream 点 up, 大家注意看,这里边是不是叫做可变参数啊?可变参数实际上底层是不是也是数组啊? 对吧?可不用参数,那么你这里边就可以来一个,比如说 a, a 呀, b, b 呀,这里边数据你是不是随便写呀, c, c 呀,然后 d, d, d 呀,等等啊,他这样的话呢,也会得到一个 流,拿到了流之后,我们又可以做一系列流水线式的中间操作啊,也就是说白了,针对数据进行一系列操作,最后产生一个你所需要的结果啊,利用这个终止操作搞定吧。嗯,那么还有第四种,第四种, 第四种呢,那叫做创建,可以创建无限流,无限流,什么叫无限呢?无限啥意思? 无穷无尽对吧?哎,你可以创建无限流。那么创建无限流的方式有两种,第一种呢,又称之为叫做迭代啊,叫做迭代,迭代怎么做呢?也是通过 stream 类中提供了一个方法,这个方法叫做 iterate, iterate 方法,然后呢,这里边需要两个三数,第一个是不是带范型,范型的种子啊?后边这个叫做 ulnery operator, yunnery operator 什么意思, 对吧?比如说 univer operator, univery operator, 不知道,那就看一下用 a r y unori operator 啊,这个注意看,明显是不是用 j d, k 一点八出的一个叫做函数式接口 手啊,说白了 o univer, 翻译过来大家也大概猜到了,这叫一元运算吧,叫一元运算,然后你看,哎,这里头好像没写,没写是啥意思呢?看他继承了 function, 是不是要继承了方格身呢?然后给方格身指定了两个都是 t 啊,他这里是不是声明个 t, 然后呢?继承了方格身,两个都是 t, 什么意思呢?就是说你传进去的是个 t, 返回值也是个 t, 也就是传进去的是一个值,返回的值是相同类型的, 那是不就一元运算呢?对那个值进行一个一元运算的操作,那现在让你实现这个接口中的这个抽象方法能不能实现呢?传进去一个参数,返回的是一个同一个类型的值, 嗯,那么什么意思呢?前面个种子,种子说白了呢,就是一个起始值,然后边呢一元运算, 对吧?啊?比如说我来个 x 吧,然后我想对他进行什么操作呢?比如说 x 加二的这么一个操作,这样的话呢,他会给我们产生一个流啊,产生个流, 那么当然现在呢,我们创建了流,接下来我们是不是可以对这些数据做一些中间操作,终止操作呀?当然这俩操作咱们还没学,那么现在呢,为了让大家看一个结果,咱们来个终止操作,看看结果,好吧。啊?什么是终止操作呢?比如说 stream, 四点 foe h 啊,这叫便利,然后呢,我们说要把这个流里边的内容啊给打印输出,那么其实这个呢,叫做终止操作, 听到吗?这叫终止操作,那么接下来就看看这里边有什么效果吧,右键运行, 注意看他是不是在不断的产生,这,这无限吗?哎呦呵,我这一停他不让我看呢,啊,这呢,对吧?哎 啊,他还能给我回放啊,我,我已经停了,注意看他是不是产生的是偶数啊,不断的产生偶数, 从起始我这个种子开始,然后呢,从这个起始值开始不断的做加二的操作,那说白了就是无限的生成偶数,那这个就叫做迭代,那比如说你现在嫌他太多了,我们也可以来点中间操作,听懂吧?可以来点中间操作, 什么中间操作呢?比如说来个使劲点上 limit, 别蹭成那么多了,我 limit 就是说我取十个,但是这还没学呢,咱们先感受一下 这点,他就能不能让我对齐呀,我看着好别扭啊, ok, 对吧?那这个呢,叫做中间 操作,也就是上边我们创建了一个无限流,然后呢,我要取十个,别让他无,永远无限下去,这叫中间操作,然后利用中指操作,做一个什么操作呢?我要把这些数据打印输出啊,就是有结果了啊,让大家感受一下右键运行,那是不就十个呀? 哎,产生了十个从零种子零开始的十个偶数啊,那这样的话就创建了一个无限零, 那么创建无限流还有第二个,那叫啥呢?叫做生成,叫生成。那么还是通过 stream 一个方法叫做 generate 啊, generator 方法参数需要个 splat, splat 咱们是不是已经非常熟悉了?这是 是一个供给型接口,它里边的抽奖方法是无参,但有返回值吧。无参有返回值,那就无限生成呗。无限生成啥呢? mas random, random, 是不是静态方法呀?无限生成随机数产生一个新流, 可以吧?哎,无限的产生一个随机数。嗯,那么当然咱们现在也想先先先看结果的话,是不是先来一个终止操作呀?点 alt 冒号,冒号 carrink like 右键运行,看下效果。 这是不是无限的产生 double 啊,对吧?哎,无限的产生随机数啊。 ok, 那么接下来呢,我不想让他产生那么多,我也可以给他来一个,对吧?点 limit 中指操作产生 五个吧,然后再去 foes 打印输出。上面这个刚才是不是也也也生成了啊?生成了十个啊?没没没,没关系 啊,当然上面呢是利用这个,呃,迭代生成的十个偶数。下边呢,是利用这个第二种生成的无限流,生成了多少个呢?生成了五个大于等于零点零,小于一点零的随机 w。 好吧,行了,那么以上呢,就是创建流的四种方式,那么有了流之后,接下来流实际上对应的是不是就是你数据原中的数据啊?接下来说白了,我们就可以对数据进行 一系列处理,好吧,行,先把这四个操作,呃,这个熟悉一下。
