粉丝7.8万获赞28.9万

接下来我们来学习死吹母牛的生成方式,在讲解这个生成方式之前,首先我们来回顾一下体验死吹母牛的过程。 这里我有一个集合,这个集合中有一些数据,我们可以通过这个集合生成一个流,生成的流之后接下来我们通过 falt 来过滤一张开头的,我们就得到了一张开头的数据。再接下来我们通过 flt 过滤长度为三的,我们就得到了长度为三的数据。那么 最后我们通过说一起来指定我们对这些数据进行的操作,就是 sutm 点 out 点,不让他烂,把这些数据在控制台输出。 那么在这个过程中我们刚才说到了三种操作,一种是生成流的操作,一种是中间的过滤操作,最后 是我们在控制台输出的操作,那么在这里我们说一下我们此车美流的使用,它是分为三种操作的,一种是生成流的操作,一种叫中间操作,一种叫终结操作。来 我们说一下此吹母牛的使用,它分为生成牛、中间操作和终结操作。我们先来看生成牛,他是通过数据源集合或者数组等生成牛,比如说我们通过这个集合 act 点 steam, 也就是我们开始定的是个奥瑞利斯塔嘛,这个集合他的变量名叫做利斯塔,我通过这个集合调一个四十五方法就能够生成一个流,中间操作, 一个流后面可以跟零个或者多个中间操作,其目的主要是打开流,做出某种程度的数据过滤或者映射,然后返回一个新的流,交给下一个操作使用。比如说我们不要 方法,他就可以用来进行中间操作,他操作完之后还是一个死水目流。最后我们来说终结操作,一个流只能有一个终结操作,当这个操作执行后,流就被选光了,无法再被操作,所以这必定是流的最后一个操作,比如说这个 fex 方法,他就是用来为数据 指定对应的操作的,他是一个终结操作。好了,知道了我们死吹美流的这三种使用之后,接下来我们讲解第一种使用就是生成流,我们死吹美流的生成方式有很多种,这里我们讲解三种常见的生成方式。先来看第一种就是 可耐克人体系的集合,可以使用默认方法 steame 来生成流,注意这说的是可来客人体系的集合。那么第二种是迈普体系的集合,他不能直接生成流, 他只能间接的生成流,一会我们再去演示。第三个就是数组,可以通过 steam 这个接口中的静态方法来生成流,看这里 这个方法是一个可变参数的,他当然可以传一个数组了。好了,知道了这三种常见的生成方式之后,接下来我们到程序中去演示一下。 来看这里我新建好了一个包,在这个包下建好了一个类,在这个类里面有死垂母瘤常见的三种生成方式,注视信息。接下来我们先来演示。第 一个可耐克人体系集合来生成四川母牛,那么这里我们直接来一个利斯特吧,利斯特斯脆,利斯特,又一个奥瑞利斯特,那么这里写个斯脆。 接着我们 list 调用一个死去母方法,看出 ltv 生成,左边的内容,给他起个名字就叫 list 死去母。 接着我们再来一个赛特集合,死去赛特,又一个哈西赛特,这里写一个死去, 然后赛特点死去掉这个方法。 ctrl alt a 生成左边的内容,给他起个名字叫赛特死去。 来看一下,这就是我们可耐克人体系的两个儿子利斯特和赛特,得到他们对应的 steam 流的方式就是使用这个默认方法 steam 来 生成牛的。好了,接下来我们来说一下迈普体系的集合,他不能直接生成牛,但是他可以间接生成, 什么意思呢?来看一下 mate 死去,来切换一下输入法啊死去, 然后后面跟一个引推这,然后写个 mate, 你有一个哈西 mate, 这里写上死去, 后面是引踢者,那么拿到他之后,我们可以这样来做卖点,认真看踢赛特 得到箭的集合,箭的集合是一个色彩集合,那么色彩集合就可以调用这个死去母方法了。看完出艾奥特威生成左边的内容,那么这一次我们得到的就是他 剑的这个死却母瘤好了,他是间接的得到瘤的啊。来再来看 mat 点 w, 这是得到他值得集合,你看这个 wc, 他返回的是个可来开始集合,那么这个可来开始集合,他就可以调用这个死去的方法来生成牛。 ctrl altv 生成左边的内容,那么这里就是我们的歪六所对应的死去母牛。 那么再接着来一个迈普点 nt 四艾特来看一下,他得到的也是一个四艾特集合,那么这个一样可以调用 steam 方法。 ctrl altv 生成左边的内容,那么这里是我们的这个箭之这对象所对应的理由。 好嘞,那么这是迈普及和间接的生成流,这是箭所对应的流,这是直所对应的流,这是间直段对向对应的流。好了,接着我们来说第三 个数组,他可以通过死去母接口的静态方法来生成流。那么在这里首先我们来定一个数组,死去中国号 s t r。 那么这里我们给一些数据。 哈喽, word 加了。好嘞,有了这个之后进来看一下啊,我们用死去他的 静态奥方法,他是可变参数的,所以我们可以直接传一个数组过来, ctrl altv 生成左边的内容,这样我们就得到了 个这个数组,这串数组对应的流,我们该起个名叫 s t r 哦,瑞斯群。好的,那么这里他既然可以 传一个数组,而且他是可变参数的,那我直接传可变参数是不是也可以呢?来看一下,那就是死吹点 out, 那么这里我们直接传这个, hello, word 加吧, ctrl altv 生成左边的内容,这样我们一样得到了一个这个字符串数足所对应的这个理由。 那么在这里我们还可以通过这个什么点啊,来给一个樱桃类型的数据,十二十 三十 ctrl altv。 认真看,那么这是我们因特数据所对应的 ctrl m 零。好嘞,那么在这里泛行他写的是引帖点啊,这个你得知道。好嘞,这样我们就通过这几种方式来 生成了我们的牛。注意,迈普集合他不能直接生成牛,但是他可以间接的生成他的腱直 以及建制对等一等流。我们的可拉伸体系的集合和我们的数组,他都是有方法能够直接生成流的。好了,到这关于四川美流的常见的三种生成方式我们就讲完了。

接下来我们来学习死吹牛的收集操作,什么意思呢?来看一下对数据使用死吹牛的方式,操作完毕之后,我想把牛中的数据收集到集合中,该怎么办呢?来看一下死吹牛他提供的一个收集方法,就是 来我们到帮助文档中去看一下克拉克这个方法,他需要这样的一个参数,那么这个参数我们点他一下,他是一个接口,我们再往下看来这里 有一个跟这个接口名字很像的一个东西,但是他加了一个 s, 我们点他一下,这是一个工具类,来我们说一下这个工具类,它里面他提供的 各种有用的还原操作的可莱克特,也就说他其实提供的就是这个可莱克特具体的实线。 来接着我们往下看他里面的方法,来找一下啊,来这里有一个突力死他, 他返回一个可莱克特,将这个元素累加到一个新的利斯坦里面。再来看这个 two 赛特,他返回一个可莱克特,将这个元素累加到一个赛特里面这个突迈普,那很明显他返回一个可莱克特,他会将这个数据累加到这个迈普集合里面。 好了,这就是这几个具体的实现。来回到资料,我们说一下这个收集方法的这个参数,可来个他,他是一个接口,那就说我们直接使用这个接口使用不了的,但是你不要着急 级呀,因为有一个工具类可耐克特斯,你看跟他就多了一个 s, 他提供了具体的收集方式,他的返回值类型就是这个可耐克特, 所以我们将来可以通过这个工具类调这些方法放到这里使用就可以了,那么这个图类似的方法就是把元素收集到类似的集合中。图色的方法就是把元素收集到色的集合中。图卖铺方法就是把这个元素收集到卖铺集合中。 好了,知道了这个收集方法的使用之后,接下来我们到程序中去演示一下。来看这里我新建好了一个包,在这个包下建好了一个类,在这个类里面有这个收集操作的注视信息 来看这里我有一个类似的集合对象,里面有一些数据。我们来看这个需求啊, 得到名字为三个字的理由,来这里我们一起来写一下啊,那就是类似点死却母,然后点翻小腿过滤一下 s 来一个箭头, s 点什么名字为三个字的,那就是 s 点 nice 等等于三。好嘞,这样我们就得到了这个数据,然后往 ctrl altv 生成左边的内容, 这个就是我们的操作完之后的这个流,接下来我要把这个流里面的数据给收集到集合中来,看一下怎么用啊。那就是雷斯特 这个牛吊用这个可耐克的方法,他要的可耐克是个接口,你不要着急啊,这个可耐克特斯他里面有个突类似他方法,可以 把这个数据收集到利索集合中,而我们这个他操作完,他本身啊,他就是这一个利索进行操作的,所以我们就用这个方法, ctrl altv 生成左边的内容,那么这里我们给一个内慕斯 接收一下。好了,写完之后我们来增强货,来便利一下此区内蒙号内蒙斯 s o ut 一回车输出这个内幕来看一下啊,右键执行,这次控制台输出的他只有三个名字的字符串,柳岩是不存在的, 那么这样就是我们针对这个绿色集合进行了一些操作,之后我们把这个留的数据还可以再收集到一个绿色集合中,好了,这就是收集操作,那么这个绿色集合说 呢?我们来看一下这个赛特集合,认真看啊,那么在这里首先我们创建了一个赛特集合,里面存出了一些元素,接下来 我们要得到这个年龄大于二十五的瘤,也就说我认为这些是年龄,对吧?来我们要得到年龄大于二十五的,那么赛特死却母得到这个瘤。转奶,我们来过滤一下,如果这是年龄,我们来个 a 值, 然后来个箭头 a 指他要大于二十五,然后 ctrl v 得到这个赛特的死去。 好了,那么接着我们这个过滤完之后得到这个瘤,我要把它收集到色彩集合中,那就是赛特斯翠姆调用这个可耐克的方法,这里面来个可耐克特斯,这次是 toust, 那么这一次我们这个色的集合,我们起个名字叫 ax, 来一个增强货遍地下引推指 a 指冒号 a, 纸丝 进来之后 sut 一回车输出这个 a 来看一下,这个 a 一定是啊,大于二十五的,看这里啊,这两个肯定不大于,这三个是大于的,所以在控制台输出了三个数据,我们来看一下是不是这样的,三十三,三十五,三十,他都是大二十 五的,没有问题。好了,接着在这里把它给注视掉。接下来我们来看最后一个,认真看啊, 我这里有一个字符串数组,每一个字符串数据它是由姓名数据和年龄数据组合而成的,那么在这里我要得到一个字符串中年龄数据大于二十 八的流,也就是得到这个数据大于二十八的流。怎么做呢?首先我要把这个自负上数足,把它变成一个流啊,那就是 steam 点二方法,把这个字符串数字给传过去,这样我们就得到了一个流,接着我们来过滤一下,来看一下,我把这个字符串给他拿过来,注意啊,这次拿到的是这每一个字符串,对吧?我要拿到年龄数据,那就是 s 点撕破例,他做一个分割拿到这个所以唯一的这个数据, 然后我要把它转成一个雁塔类型的,在这里我们要判断他是大于二十八的,然后在这里我们来看出 微来接收一下他,那么这个流我们就叫哦瑞思垂模吧。好了,那么现在我们就做了这样一个操作,也就是把这里面这个年龄数据大于二十八的这个数据收集到这个流里面来了,大于二十八的我们来看一下这个不是, 那么这三个都是。接着我们来看这个需求六,使用这个死去美流操作完毕的数据收集到这个迈普集合中,并便利要求这个自付串中的姓名作见年龄作。直 来大家看一下啊。这一次我们这样来写,首先是这个哦瑞斯崔姆,他要调用一个收集方法来,这次他里面的这个收集器,他吐的不是一个赛特,而是一个迈普, 那么这个该怎么用呢?来回来我们看一下这个出迈普,他这里有两个反馈式,那么前面这个是箭,后面这个是直, 所以在这里我们来两个那么的表达式,那么第一个就是针对箭进行操作的,第二个是针对直进行操作的,来来一个这个数据 s, 然后来个箭头,我们 s 点撕破内存,你们看啊,用逗号分隔,那么这里我们拿到的是这个零缩影的数据,也就是他的姓名。接着在这里来 看一下啊,我们这个括号我是不是多写了一个,把它去掉一个啊?我们来第二个数据来看一下 s, 来一个箭头 s 点丝 polit, 然后逗号分格,这里我们拿到伊索引的这个数据,注意这一次我们要把它转换一下,也就是 因推荐点帕斯印特。来这里来一个小括号来认真看一下, 那么这里我们传了两个那么的表示,第一个是把这个字符串中的用逗号风格的前面这个数据拿出来作为键,也就是姓名作键,那么这第二个 那么他表达是是把这个数据拿出来转成硬条类型,也就是年龄坐直。那么最终我们得到了一个迈普集合,来看一下啊,在这里 我 ctrl altv 生成左边的内容,我们得到的这个迈普集合,他的箭就是此趣类型直,就是引踢这类型,那么在这里我们给他起个名字就叫迈普。好了。接着我们来便利一下这个迈普集合,认真看啊。首先 我们迈普点 ksit, ctrl alt v 得到键的集合,在这增强放死去音 k k 赛,他进来之后迈普点 get, 根据这个 k 得到这个 v 六, ctrl alt v 得到这个 v 六,最后 s o ut 一回 输出这个 k, 加上这个 w, 那么这是迈普集合的便利。来我们往这边看,重点来看一下,我们这个操作是把这个字母串中年龄数据大于二十八的给 什么给收集到这里面来了,对吧?也就是放到这个留里面了,那么在这里我们再把这个数据给他收集到我们卖部集合中,并且使用这个自付串中的前面这个数据作为键,后面这个数据作为值, 收集到迈普集合中的,最后我们便利了迈普集合右键执行。来我们看一下控制他的输出,柳岩是不会出来的,但是其他几个数据是出来的,这是箭,这是直, 好了,这就是收集这个迈普集合的用法。好了,到这关于这个收集操作我们就讲完了。

家伙八中提供了死追母流,他可以对集合进行操作,可执行复杂的查找、过滤、驱虫、排序等操作。 今天给大家分享两块,第一呢是 stream 流,对立斯特的便利过滤,查询驱虫和排序。第二部分呢是 stream 流的调试,看一下代码视力, 这里有一个学生集合,接下来呢,通过几个需求对 stream 进行一下了解。首先呢,便利集合,打印学生数据,查询高三的同学,这里呢,咱们可以通过 filter 进行过滤,然后过滤班级等于高三的。 这里有一点注意的是, filter 是个中间操作,他返回的是个新的流,所以说咱们需要将流转换成集合,查询学生张三的信息。这里呢,第一步先是过滤,过滤出姓名等于张三的。接下来呢,咱们通过 fund first 返回列表中的第一条数据。这里呢, 需要注意一点, fund first 和 fundini 呢,都是查找第一个元素,但是呢, fundini 只有在串形情况下,它返回的是第一个元素,如果并行的话,它是一个随机的元素。获取年机信息,首先呢,咱们需要根据年机将 list 转换成脉搏, 然后调用 distinct 方法就可以获取到对应的年级信息。根据学生年龄进行排序,这里呢,咱们调用 stream 的 soti 的方法, 然后根据学生的年龄进行排序,这里呢是升序的,如果是降序呢,需要教调用 reverse 的方法。根据年级进行分组,咱们通过格尔沃拜对年级进行分组,最终呢是返回一个 map 类型的集合。最后咱们看一下 stream 的调试,这里呢,咱们选择根据学生年龄排序进行调试, 这里可以看到一个追踪当前流的调用链,咱们点击完成之后呢,会看到整个调用的过程还是比较方便的。最后小伙伴们在工作中还用到了哪些 stream 的操作?评论区分享一下。

接下来我们继续来学习死却不留的常见中间操作。来看这里,这次我们学习迈普方法和迈不出印腿方法,这个迈步方法,他的行测是个反 k 式这样的函数式接口,这个接口中有个方法啊破烂,他接受一个 t 类型的参数,返回一个 r 类型的结果。那么 我们再来看这个 mat 图印头,这个方法他的形态是个秃印头反 k 是这样的函数式接口,并且这个方法他返回的是印头死去母,而不是死去母。来,我们再来说一下这个印头死去母,他表示是原始的印头流, 而这个秃印的反 k 绳。这个函数式接口中有个方法叫奥普莱奥字印摊,他根据一个 t 类型的参数得到的直接是个印摊类型的结果。好了,这就是这两个方法的区别,那么知道了这两个方法区别之后, 接下来我们到程序中去演示一下这两个方法的使用。来看这里我新建好了一个类,在这个类里面有这两个方法的注视信息。在 们方法中我们创建了一个集合,存储了多个字不串元素,这次字不串元素是我们的数据字不串来看一下这个需求,将集合中的字不串转化为整数之后再控制台输出,我们先使用这个迈步方法来实现。来 我们一起写一下啊绿色点死去母,首先得到这个流,调用这个脉谱方法,他的参数是反 k 省这个接口,这个方法是根据 t 类型得到一个 r 类型,我们这次是根据一个 字符串类型得到一个印特类型的,那么就是调用这个引区,指这个类中的 pass 印特这样的一个方法, 那么最后我们把数据在控制台输出 fox exctm 点奥特,来个引用运算服普润特烂右键执行看一下,控制他的输出,十二十三十四十五十没有问题。那么接着再来看一下,我 ctrl cctrl 反线给他注视掉, ctrl v, 那么这个地方其实我们是可以用方法引用来替代的,那么就是用这个引推着这个类中的静态方法 pass 印他右键执行来看一下,控制他的输出也没有问题。 好嘞,那么这个迈普方法用完之后,接下来我们来看一下这个迈普粗印腿方法,他能不能够实现这个需求呢?来看一下啊,绿色点 steam 点 mat to, 因他要的是这样的一个函数式接口,他里面有这样一个方法,接受一个什么 t 类型的参数,得到一个印条类型的,那么这里我们是一个自负串类型的,最重要的就是整数类型的,所以也可以用,那就是 s 来个箭头,这样写是没有问题的。当然我们最终使用这种方式来写吧,那就是引推着来一个引用预算符帕斯印他点 fexcem 点 out, 来个一个月三伏仆人特拉右键执行看一下,控制他的输出是二十三十四十五十。好了,那么看到这里我们发现这个卖不透印,他可以做和卖不这样一样的事情,也就是这个需求,我们通过这两 这种方式都可以实现,那么如果这样的话,我讲他就没有意义了,对吧?所以重点我们要看他的反馈之类型是 inter steam, ctrl c, 然后在这里我们来一个 ctrl v 一回车,这个印特斯崔姆他也是一个接口,那么他是原始的印特织的元素序列,在他里面有一个方法叫做萨姆,非常有用,来我们看一下他返回此流中元素的总和, ctrl c, 然后 后 ctrl v, 我们放到这里,我把它先注视掉。啊,我们先说一下这个方法,我们是在印他死去母中找到的,来,我们回来再看一下我们这个死去母中,来看一下啊,哎,稍等一下, 这个帮助文档怎么给关闭了呢?来我们输入一下 steam 一回车来找一下,看他里面有没有萨姆方法 来 s 开头的没有,对吧。所以说这个萨姆方法他是在这个因特斯崔姆这个流动里面的,那么这里注意啊,他是因特斯 翠母,这个流里面的方法怎么用呢?来看一下。我首先通过这个类似点死翠母得到一个死翠母流,再通过麦普图印特把这个里面的字不串数据转成一个印特数据用的是 引推着点帕斯印特这样的一个什么静态方法,这里我们写方法引用好了, 那么再接着认真看,这次我们做一个操作,就是萨姆求和注意调用了这个方法之后,我们就得到了一个因特式题目,那么 求和我们 ctrl ltv 最终生成的一个结果,我们叫他 redot 吧。好了,来看一下啊, s o ut 一回车来右键执行,看一下,这次控制他的输出是一 一百五,也就是这一次我们把这个字符上数据先把它转成因特类型的,最后我们把这数据进行了一个求和,那么这个方法是因特斯崔姆里面才有的,所以说我们这个 mapto 因特他可以什么 写其他的操作就是通过他得到一个因特斯韵母,然后我们就可以使用因特斯却姆中的方法了。好了,到这关于这两个方法的使用,我们就先讲到这里。

扎弯一分钟创建 stream 并行流创建 stream 并行流有两种方式,第一种方式是在当前有一个 list 集合的基础上, 使用集合接口的 parallel stream 方法创建并行流, 然后对 parallel stream 做出判断。 根据打印结果可以看到 parallel stream 是病行流。假如我们现在有一个 stream 串行流, 这时可以使用 basic 接口中的 parallel 方法将串行流转化为病行流, 然后打印判断结果, 可以看到判断结果为处。以上就是创建 stream 并行流的两种方法,你学会了吗?记得关注再走哦!

假喇叭中的 stream? 关于假喇叭中 stream 的处理,很多小伙伴私聊我该什么情况?使用流有什么好处? 留的底层就是一个影视迭代,能够迭代的一定是集合数组使用留的场景,小伙伴们明白了吗? 流是延迟执行的,类似 g s 中失建毁掉函数,比如一个千万级别的 excel 表格,读普通的复循环内存溢出,而流很轻松的可以实现。家人们关注我,时刻为你分享知识。

哈喽哈喽同学们大家好,在我们日常工作当中经常会使用到 stream 流,那么 stream 流里面有一个 flat map, 大家熟悉它的用法吗?今天我就给大家介绍一下 flat map 的一个用法。 呃,那么我们首先来看这样一个场景。我现在在创建,我创建了一个门的一个集合,就是人的一个集合。那在这个人每个人的一个属性当中,他都有一个职业。 呃,一个人他可能有多种职业,比如说他是医生,又是画家,对吧?那我现在创建这个,然后给他附上三种职业,职业一,职业职业二,职业职业三。然后创建第二个对象, 创建第三个对象,分别都把它加到这个集合当中。那我现在的需求是什么呢?我现在需求是想要统计这个 所有人当中的职业的一个集合,所有所有人职业的一个集合。那我们是怎样去实现呢?那如果我们使用 map 的话, 我们通过 map 去得到他的所有的一个职业,那他最终返回的是一个 list。 欠掏 list, 也就是一个二维数组的一个结构,显然是不符合我们的要求的。 那我们再来看一种方法,这种方法是我们现在是扭了,就是使用了一个哈西菜,哈西菜的一个集合。那我们去便利每个人,然后把 所有人的一个集合,然后放到这个集合当中,这样也是可行的。这是传统的我们。呃,可能在代码里面可能经常会写写这种,但是我们可以使用 plate map。 map 的话,它是对呃对集合的一个扁平化处理。那我们在这边是直接使用 flat map, 然后里面是获取它,获取 job, 这个 job 因为是一个呃 list 对吧? 是一个,是一个集合。那我们直接就是点 stream, 那他就会对这个对我们的 jobs 进行扁平化处理, 然后再再去从,然后再把它收集成一个 list, 那这时候我们得到的就是一个所有人的一个职业, 所有职业种类对吧?因为种类他是需要驱虫的。所以说我们这边用的是哈西菜的,这边用了一个 distinct。 那我们看一下,我运行一下代码。 嗯,好。我们首先看一下第一行输出,第一行输出就也就是我们用 map, 它不符合我们的要求,它是一个二维数组对吧?然后每个它都打印了三个 list。 然后第二种,第二种是可以的,第二种他是完成了我们的需求。第三种是用法拉 map, 简代码也比较清晰,他也可以完成我们的需求。 那么如果对于我们再看一种情况,就是我在这边也是一个创建了一个慢的集合,然后这个慢里面它有一个 house, house, house 就一个人有多套房子吗?多套房子。然后这多套房子里面又嵌套了一个 dose, 因为一个一个 house 里面他有多个门,对吧?他的门的一个名称。那我们如果想统 你这样子的一个对象的话,那我们该如何去做呢?就是我在这边首先构建了一个。首先构建了一个这样的一个 慢集合,对吧?构建了一个这样的慢集合。然后我们首先对第一集进行扁平化处理, 低级变米,我们也就是对 house 进行扁平化处理,然后紧接着对 dos 进行扁平化处理,以此类推,就是我们再经过一个 distinct, 也就获取到了一个门的一个种类数。我们预习一下代码 好也是没问题的。那我们现在对这两种对这个方式去进行 debug, 看他是如何去进行扁平化处理的。我们在这边打一个灯点,然后看这,到到这边之后,我们点击这个按钮,点击这个按钮之后,我们可以 已看到首先它是三个集合对吧?在这个三个集合,然后通过 blackmap 第一个集合,他把他把职业一,职业二,职业三,然后进行的扁平化,把它展开,也就是我们的扁平化处理啊。第二个他也是通过这个去把 直接四四五六,然后去解析出来,然后七八九依次类推,然后最终变成了一个 list, 然后再使用。我们使用了一个 distinct, distinct 的话他就会去重,就是因为因为现在他都是不相同的,所以说他 一一进行了映射,然后最终返回一个类似的集合对吧?那我们看一下。我们看一下第二个扁平化,就多级的一个扁平化处理。呃,我们第八个到这边 还是我们点击这个按钮,然后我们拿到一个呃三个慢 d q, 然后 经过 flat map 的一个处理。第一集 map, 它是解析出来一二三四五六七,呃一二三四五六。然后第二集第二个问题挑理,它是呃,解析出来七八九十十一十二,然后第三种是一个呃这些,然后最终 经过那个 distinct, 然后再再经过 collect 收集,收集成一个 list。 这样的就是扁平化处理 map 的 flat map 的一个处理方式。好,谢谢大家。

看一个需求,这里有两个对象,一个是班级,一个是学生。班级和学生是一对多的关系。 这边有一个卖不集合,卖不集合的 k 为班级 id, y 六是班级所对应学生的集合。需求一获取所有班级的学生姓名。这里就用到了 sweetmel 中的弗莱特 map flat map 的作用就是将 map 流中的每个学生集合映射为一个流,然后通过 get name 的方法进行合并,最后把它返回成一个集合。 展开的流可以进行操作和计算。看下边两个需求,获取所有班级学生 id 并排序。这个双冒号是上面箭头函数的一个简写,将展开的流进行扫的排序。根据 id 还有下边这个获取所有学生 id 之和。可以通过 redouce 进行计算,获取 所有 id 之和。执行看一眼效果。这里面的脉搏集合是两个班级,班级一和班级二,一共有四个学生。这打印出了学生姓名张三、李四、王五赵六。还有学生 id 排序一、二、三、四。学生之 id 之和为十。最后做个总结 stream 流中的 flatmap, 他可以将一个流中的每个元素映射为一个流,然后将这些流合并成一个流。这些操作可以用来处理一些嵌套的集合或者数组。他的重点是嵌套的集合,将他们展开成单个元素,然后进行处理。

好,那么接下来呢,我们就开始学习扎尔巴推出的另外一个核心叫做 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。 好吧,行了,那么以上呢,就是创建流的四种方式,那么有了流之后,接下来流实际上对应的是不是就是你数据原中的数据啊?接下来说白了,我们就可以对数据进行 一系列处理,好吧,行,先把这四个操作,呃,这个熟悉一下。

哈喽,大家好,我是那个爱分享技术大数据工厂师张工。今天继续跟大家分享关于这个 spac 追命逻辑算的一些相关的功能。今天跟大家谈到的是这个 dc 追梦的一些常用的这个操作。 那么就是说因为 spa 的他其实是一站式,或者是在说是整合式的这种开发形式。所以说这个留地算的这种 spa 水命和之前像 p 级算的像 spa sko 或者是十八个 dd, 它其实非常类似。那些常用的这个算子其实用法是非常这个相似的。 对于那些就是说是用法相似的。其实在这就跟大家过得去追数只是简单的就是提一下。而对于一些就是说是可以认为是专用,或者是就是说是感应比较大的,我们可以在这个心理室,就是说是这个随便的一个心理室跟大家 去详细的去谈论。下面我们进入到今天的这个具体的这个内容。就是说 disco 他操作其实是分为两类,主要是这个川字法母和这个 假说是 x 对吧? x 在这也可称之为是奥特布特。对于这个川字方面这种操作性你是他其实类似于是和 rgd 的其实非常类似对吧? 对于一个 dcam 来进行这个计算,然后输出新的这个 dcjm, 其实就是一种转化的这种形式, a 转的 ba 和 b, 他其实是都是枪子的这个类型,之后是奥特铺的 它其实类似于是二十几种的这种 x 的这种操作,将这个 dcj 母输出到外部的这种系统,像文件系统展示一下 ats 对吧,手机扣啊,或者 是一些比爱爆表的这种系统,迪斯森们他支持的这种喷法网,像出卖款啊,弗兰德迈克啊, fute 啊,一盘儿类型呢,油腻呢,炕上啊与酒色 可能别歪了。最近是别歪了,今晚炕沟铺穿的包么卬们顶上摆开。噔噔噔噔就说 这一次说明是在这个二里地或者是这个斯巴克斯扣里面我们用到的这个算子里面是他大部分也是支持的。大部分的这个用法其实和二里地的这种同名的这个方法是非常类似的。而不同的。下面就是我们也拆是我们重点然后看的这个内容。 首先是这个川字报母,这个 dcj 们内部其实也是 rnd 的这种序列。川字报母提供了直接超住 dcj 母的内部 rnd 的种方式。对于那些 dcj 们没有提供 二十一方法的这种操作性,你是我们也可以通过电用看似方木直接进行这个转换,非常的这个灵活。比如这个 disco, 他内部是没有提供,就是说与其他人的进行交的这种操作。那么我们可以通过看似方木来去进行这个实现。 就是下面这个代码 ds 点测算吗?里面就是对于这个 d 来说,我们可以就是把它交往一个外部的这个 rdd 来去进行这个操作。其实就是说是我便利这个 ds, 它里面的这个所有的 rdd 逐个的去和这个外部的这个地进行这个观点来去进行操作,类似于十分批处理 之后是非常重要的。这个 updates then i can 由于这个流失的计算,他是这个连续进行的,很大可能要七上二下是不间断的 运行,因此可能需要保持一些状态,简单的这种全局广播变量显然是不够的。所以说 spac 水平提供了专门的这种状态更新的这种方法,称之为是 fdsdbakk。 比如我们可以改造一下。之前呢,我得靠那种案例,不仅统计每次性接收到的这个数据,而且可以让此频进行这个累加。 就是说在这儿心里什么就像先定一个状态还更新的这种函数,比如说是 fd 的分个盛世。 在这里面根据是我们要整合。首先是一些历史数据的这种获取,对吧?这样的话就贴了根据。我们要必须要设置点大点来保存三观的零利数据。这个是当前获取数据的一个贿赂,就是这个萨姆。之后是把历史数据和当前数据 进行这个内加得到,就是截止到现在我们这个最新的这个数据之后听的时候我们还要把这个数据重新回传,就是说是更新到历史数据里面去。这个基础是二百六十六百 k, 或者是会帮我们进行的这个操作。就这个。在这里面我们要注意的就是 使用这个算子。这里是我们必须要设置检查点,否则会报错。原因很简单,就是我们要保存数据。 之后是窗口, windows 操作流逝计算,他是周期性去进行的,有时除了处理当前周期的数,还要处理最近几个周期的数据。 这时我们就像就是这个窗轴,就是这个窗口窗轴的这种方式了。我们可以设置数据的这种滑动的这种窗口,将数个原始的这种 合并成一个窗口的这个 dcm, 比如说左图正形式。这里面你需要两个要注意的事项,一个是窗口的这个长度,另外一个就是滑动的这种区间。 稍微窗口长度,它其实就是指我们窗口跨越的这个周期的这个次数,其实也是指我们这一个窗口。这里是要计算几个周期的这个数据。在图里面其实就是这个框包围的这个范围就是这个三。 之后是滑动的这个区间。稍微滑动的区间就是指我们从当前创造到下一个窗口的这个最低数。也就是说是我们多长时间去计算一个窗口, 类似于是我们等待的这个时间对吧?这个其实我们可以看到它记住是二的这个形式。直观来说就是我们每当两个周 过期时间内,是计算最近三个周期时间的这个数据就是这个。如果这两个参数都是一的话,那么效果其实就跟我们不使用窗口是一样的,就是来一个就算一个对吧。每一个窗口内的这种所有数据线的意识都会合并成一个二 d 来保持到这个。第四,追梦里面去 途中每次窗口前提是要处理三个周期的这个数据,然后每隔两周期去进行这个计算, 而且计算周其他级别是比原来咱们一次一个对吧。还有就是要扩大移位,我们可以使用原始窗口的前提是打造这个空寒树啊,就生成一个带有窗口的这种 dcm, 然后是把它当做这个普通的这个字母来去进行这个使用。除了这八项题时,我们还可以直接去使用,就是说是加窗口插 男士的这种专用的这个方法。比如像康的百分百六或者是咋说的就是这个。他的这种境界就是康的百温度 reduce by 温度, reduce by key 的温度,以及扛的百 k, 就是这个抗的百分之六啊的温度。这个其实就是说是在之前就是在 k 啊,就是在百六啊等等这些之后再加上这一波再说的这个温度的这种形式。 这后是奥特铺的这种操作。奥特铺的操作,你是将这个第四支米结果输出至外部的这种系统, 这意味着一段迪斯菲姆计算的这种结束。目前可用的奥特普特,比如说像 printer 对吧。这是最简单的,主要用来去测试去使用。可以打印迪斯菲姆中各个 rdd 的一个内饰相关内容信息对吧。 print 也限定时间,可以添加一个参数来去指定 输出头部传输的任务数量。就是打印几条对吧,像不是那五就是打印五条,正好是 cbs text files 进行时,我们可以看您是把我们这个数据保存为这种像我们文件本地磁盘系统或者是啊电话系 文件的这种格式。其实和我们里面配的这种参数是这个类似的,就是我们要制定可以制定前缀对吧?以及就是说是相关的这种死定训练, 因为我们就是说他是流失不断运行的,就是说是他为什么会有这个时间系列呢?其实就是避免这个文件被这个覆盖对吧。 因为我们可能比如说我一秒就上一次,我一秒就会生成一个新的这个文件,一个历史会不断的去历史,这个文件数是越来越多的,如果我们我们的这个文件名是固定的话呢?其实就会覆盖对吧?这几 其实是不行的,除了保存文件,你说我们也可以保存为其他这种对象就是我们可以使用这种 cbas 而不借给的费用保存为一下 ccosfio 的这种格式, 他的这种方式和上面包的文件是非常类似的。之后他们也是我们也可以使用方式的 d 来进行这个更加灵活的这种凹凸不透这种操作的吗? 传入一个函数,直接转入在这个 id 之上,一定是传入的。这个函数可以实现认定的这功能。比如说我们可以去写文件,或者是写到知道这个 db 数据库对吧?或者是我们可以通过网络去发证数据。 需要注意的就是这个风格神行,你是时代定用这个 spa 的,都是计算程序专门进程的去执行的。但是这个风格水中一般也会定二第一个一些 x 的操作,但他们确实在 模科里面去执行的。这个其实我们要去注意就是我们这个具体程序这个内幕逻辑时代专问主题点上还是在这个模科工作节上去运行的。这个当我们预定到一些像国务院院啊什么之类的,这个其实会有比较大的影响对吧? 好,这就是今天给大家分享的这个相关内容,如果大家觉得这个视频对大家有帮助的话,大家可以点点关注我的视频,后续也会持续的跟大家进行相关技术的这个分享。今天的这个分享内容就到这里,谢谢大家的观看。