00:00
行,那关于这个stream的一个中间操作的映射,哎,我们就说到这儿了,映射呢,这个叫map啊,Map这个映射呢,其实用的还算比较平,这个这个多一些的啊,Map包括后边这个reduce规约,诶这两个呢,通常还搭配在一起去使用啊成那这个呢,我们就先结束了,接下来关于中间操作的第三个就涉及到排序。哎,CTRLC啊,CTRLCTRLC啊,这个粘过来,我们来这个测试一下这个排序的操作,排序这块的话呢,我们涉及到两种方式,哎,这个自始至终咱们说关于Java层面对象的排序啊,就是涉及到两个接口的问题啊,哎,那么我们只要是在排序遇到这样的问题啊,都往这块去想就行,那我们来看看这里边的方法,这呢就提到了两个,第一个呢,就是sortted,没有任何参数,第二个呢,需要传一个competitor。那很自然的想到第一种就是自然排序呗,哎,对第二个呢,就是你按指定的这种方式排啊,就是我们所谓的定制排序啊,行啊,Ctrl a ctrl c粘过来。
01:04
R,粘一下我们看这两个题目啊,那首先第一个呢叫排序,自然排序,那自然排序呢,我们就不妨先举个例子了,那咱们这块呢,就先拿一下这个叫ari.as least这呢我写一个。写几个这个整形的这个数据啊,这呢顺序我就乱着写了。OK,这呢,我就写了这样几个数,写了几个数以后呢,根据这个ari,我们这个al enter先生成对应的一个list,哎拿到list以后,那我们这块呢,List点首先呢调stream方法,得到咱们这个stream啊,接着的话呢,我们去调这个叫sorted啊,使用这种方式,这种方式呢,就给我们自然而然的进行了排序啊,其实呢,内部就是调用我们这个in的啊,自然排序的方式啊。哎,我们接下来呢,去做一个for each看一下。哎,像这个for each这块,我们做输出操作,大家呢,如果你多写几遍呢,你发现诶你看到它,你就直接知道写这个输出了,其实就是还是写多了就熟了啊这个尤其这个拉姆表达式方法引用这块呢,呃,相较于拉姆的表达式呢,就更难一些啊,用着用着其实就习惯了,那我们执行一下。
02:17
OK,那这时候呢,默认仍然是从小到大这样的一个顺序,嗯,这是OK的啊,比较清楚,那这个呢,行了以后我们看一下,咱们这不是有一个叫employee data嘛,哎,我们去get employees,得到咱们对应的这个employee构成的一个集合,那这个employees点,哎,我们呢,先stream一下,再接着呢调这个叫saled,然后呢,我再去调这个for each。哎,跟咱们上面写的这个一样啊,你说这个我要是执行的话呢,有没有问题呢。把这个先注释一下。对这块呢,就相当于是按我们这个员工进行排序了,那我们看一下这个employee啊,是没有这个实现自然排序啊对你要这样写的话呢,是不是肯定会出问题吧,对执行。
03:11
你看这块就错出错了啊,Class class exception还是提到这个comparable,哎,所以再次证明,就只要是在我们Java层面涉及到对象的排序,大家呢,就去想这个comparable和compar就完了啊,一种呢叫自然排序,一种呢叫定时排序啊,哎,这个呢,我们说,哎操作的话呢,是抛异常了。看跑一场。哎,抛异常啊原因哎,就是我们这个employee这个类。哎,他呢,哎没有去实现,哎,咱们的这个comparable这个接口。行这呢就报异常了,那你要想给我们这个employee构成的这个集合进行排序,要么呢,你就是实现这个接口啊,那你把这个employee呢改一下啊,告诉我呢,按照什么方式进行排序,那要么呢,是不是就按照这个指定的这种方式排了。
04:08
对,那就是临时的给指定一种,这叫定制排序,那不妨呢,咱们就不去改employee了,咱们这呢用个定制,定制的话呢,首先也是得到我们的list啊,这个没有变,然后接下来通过我们这个employees点先调一下string方法,这个调这个sorted,那就得用下边这个了。那下边这个的话呢,嗯,这个我们先把这个整个先补完哈,哎,For each这块不变,还是呢去做一个输出,那在这个位置呢,我们需要传一个compare的实现类对象。那既然实验类对象呢,这呢不就是一个函数型接口。啊,函数式接口这块呢,又得是拉姆达表达式了,那这里边儿我们操作的都是一个一个的employee啊,一个一个的employee,那这呢,传入的对于comp来讲是不是两参数啊。呃,一一一二一下,然后接下来,哎,我们这块呢,去比比的话呢,可能逻辑不止一行,所以呢,就整一个这个大括号了啊,那在这里边我们主要呢,就写这个逻辑,比如说简单一点,咱们呢就想按照他们的。
05:13
年龄吧,来进行一个排序啊,那我就直接return了。那return一下年龄,这呢,你可以还用一下我们这个点做一个compare啊一一啊一二。那这呢,这不就OK了。啊,Return这个呢,我们就嗯这呢,因为你只有这一行了是吧。嗯,只有一行return,它点它啊,这不对啊,这这写的啥呀,点get一下它的age呗。哎,这么着行,然后呢,因为你这只有这一行嘛,只有这一行的话呢,我们说这个大括号可以省,这个也可以省,所以直接呢,我们就光写个这比较它就行了。对吧,那所以我们这个把它呢,CTRLX一下啊,把这块整个给它收起来到这儿啊,CTRLV一下。
06:05
嗯,这个我们看删的是不是有点删少啥东西了,少括号吧。啊,这样就可以了啊行这个呢要太长了,你可以把这个换行一下,这么着这呢就写完了,按照我们这个A呢进行一个排序。成,然后呢,我们看一下啊,这个年龄呢,就是从小到大。那有没有同学会想,诶,这个A怎么俩一样的也出来了呢?这又不是我们说的这个往出set啥里边放啊,咱们这呢,就是一个排序,排序里边一样一样的话呢,这个它可能就按照这个ID,比如说哎,这个ID小的就往前放了,ID大呢就往后放了,就成这种了啊那如果说呢,你这两个age一样了,你说哎那不行,我们还得再指定个顺序,你可以呢,当age一样,你再看一下salary,那这个逻辑的话呢,那你就不止一行了,不止一行的话呢,就不能这样写了。啊,这个咱们也可以稍微复杂一点啊,我CTRLZ一下再回过来。
07:03
你看这不是咱刚才是这样子写的,那这个时候呢,你可以去改嘛,比如说哎,我们在这写一下啊,首先啊,这呢是得到他们这个具体的这个,呃,Compare他们俩的先把这个删一下啊,大括号这里边我们就先把这个也拿掉,那先呢拿到它俩这个age的一个差距啊,我们可以用这个点啊,compare11.get age啊一二.get一下edge啊这呢我们得到具体的这个差值in型的一个啊age y6吧。看它,那如果这个HY6,那它呢,是不等于零的,相当于不相等,我们就直接return一下AY6,那else,那如果要是相等,相等的话呢,我们直接再去比一下它们的,比如salary,哎,Salary呢是个大部类型,哎,Double部点叫compare11.get your salary。哎,Get一下这个。这样子去比,哎这个逻辑呢,跟咱们原来的实现这个接口写这个方法的这个方法体是一样的啊行这块我们再去执行。
08:08
这就出来了啊,到那个年龄一样的时候呢,按照salary从小到大啊,你就说想按照这个salary从大到小加一个符号就完了。你看salary这俩一样啊,从大到小成,这就我们说的这个排序的这个操作啊呃,那这个排序讲完以后呢,咱们关于这个中间操作这块呢,就完事了啊整个呢就涉及到了三波,第一个呢叫筛选与切片,哎第二步呢叫映射,哎第三个呢叫我们这个排序。啊,这个需要用到的时候呢,你就考虑去这里边去找就可以了啊呃,这里边呢,呃,需要注意的就是我们提到这个,呃映射这个事儿啊,它是比较灵活的,哎,我们通过这个集合也好,数组也好,拿到每一个元素,我们可以映射按照某种关系函数啊哎,得到另外的这样的每一个值,那这里边呢,像高中原来大家讲的这个映射,那这呢是一个自变量的一个集合,因变量的集合中间要对应法则,其实就是个函数啊,这呢照样也是个函数。
09:09
哎,所以这个知识点呢,它都是这个融会贯通的哈,好,这个我们填一下。
我来说两句