00:00
成,那么接下来的话呢,我们就得是展开来说一下,因为大家看不懂嘛,我们就得从头来说一说,看看这个是怎么写的,哎,拉姆达一个TEST1。哎,拉姆达表达式的使用。行,那么刚才呢,我们其实是举了一个例子,这块我们把这个代码的片段的拿过来,比如呢,我们这写了个O1,写了个O2,然后呢,这块一个箭头操作符,后边呢,直接就写了一个东西,嗯,咱们就要写在int这。哎,点二啊掉了一个compare啊O1O2行啊,不用关注于具体的这里边的东西了啊,我们主要看这样几个部分,哎这呢我们看下它这个格式啊,哎这个格式的话呢,我们就提到左边有个东西,然后一个箭头啊一个右边了,哎这个我们直接呢,这里边说这讲几个部分啊呃,首先呢提到先说它啊这个箭头,这个箭头的话呢,我们把它叫做拉姆达的。
01:00
哎,拉姆达啊操作符,哎叫拉姆达操作符或者的话,哎操作符或者话呢,你也可以叫做叫箭头操作符啊,就是一个叫法啊箭头呢,就从它这个形式上来讲,就是个箭头啊,那么这个拉姆呢,操作符或者叫箭头操作符的左边,左边的话呢,我们把它称作叫拉姆达的形态列表。实际上呢,大家你要看到我刚才这个例子你也能知道啊,这个所谓的形态列表啊,不能看它了啊,看这个,所以这个形态列表实际上就是我们原来接口中抽象方法的行参啊,对形态列表,当然只不过这块我把这个类型也给省了啊,当然你也补上也行,不上也行,只是说呢能够省,相当于是一个类型推断了啊。好,这呢,就是我们这个左边拉姆达的形态列表这块呢,多写一句啊,其实呃,其实就是啊接口中的。
02:06
诶,接口中的抽象,诶方法的这个行残列表,OK,这呢是我们说的这个左边啊,然后呢,我们这叫拉姆达操作符的右边,哎,这个右边呢,我们称作叫拉姆达提。这个拉姆拉提啊,这个我们再写一个70,它是什么?哎,对,它其实就是我们,呃,重写的这个抽样方法的这个方法体是吧。还抽象。方法的这个方法体就是我们现在呢,提供了一个接口实现类的对象吗?啊,那你这个接口的实现类,你不得重写这个创方法吗?那个方法体是什么?方法体就是我们这个拉姆达体啊,就它成这呢,大家就有一个这样的了解了啊,那这个了解以后,那下边呢,我们就得展开说这个怎么去写啊,那么关于拉姆达表达式的一个使用。
03:12
哎,它的一个使用,这个使用呢,咱们一点点来这呢,我们诶分为这个诶六种情况给大家去介绍啊,哎,哪六种情况呢,这个我们看下这个PPT里边。哎,往下展开啊,这呢是举的例子啊,下边关于这个刚才说的这个介绍了,然后再接着具体的这个使用语法层面啊,123456,那我们就按照这个顺序呢,一个一个给大家去举例子说明啊,这样你就能够理解了,首先第一个。哎,说语法可数一,对于这种无参无返回值的这种,哎体现啊,我们来写这个例子。你看这个例子的话呢,其实咱们刚才写的这个randomable呢,就是这样的一个情况,哎,它呢就是这个情况,直接拿过来吧,CTRLC一下这呢就满足啊,嗯,大家来看一下,嗯,我们这个位置呢,是我们原来写的这个接口的匿名实现类啊,造了个对象,调了一个方法,那么我们主要呢来看这个方法,这个方法的话呢,它的形态列表是没有参数的。
04:20
这个方法呢,也没有返回值啊,对于这种情况,我们下边写的时候呢,哎,你这个形态列表就叫拉姆达这个形态列表啊,就这样来写,然后建造操作符指向呢,就是我们右边的这个重写的方法的这个方法体,哎,你就写到这就完了,哎,整个的一个方号结束,原来的话呢,我们说是这一部分整体充当了reable实现类的一个对象。就是我圈轴的一部分,那现在的话呢,这一部分就由我们这一部分呢,做了一个替换,从这个角度上来讲,我们的拉姆达表达式,实际上它就是作为我们这个接口的一个实例。
05:01
这呢是这个本质啊,大家把握一下,我们这里提到这个第四个点,哎,拉姆达表达式这个本质啊。本质这呢跟其他的语言呢,会有不同,一会咱们说明一下啊,其他的语言这个拉M姆DA呢,它其实是一个函数,像这个Python当中也有拉姆达啊,匿名函数是个函数,但是在我们Java当中,Java呢,我们讲万事万物皆对象,这个呢在这又体现了啊拉姆DA在我们Java里边,看人家Python用的挺好是吧,拿过来我们也想用,结果呢,你不是函数啊,你呢是什么呢?你还是对象啊,这不就能看到它还是一个对象,它作为谁的对象呢?左边接口的对象啊,所以说我们拉的表达式本质啊,就是作为哎我们接口的一个实例。我就简单这样写了啊,你可以列为接口的具体实现类的一个对象了,对象不也叫实例吗?
06:00
就是它啊行,也就这个拉姆达表示啊,它没有这个接口就没有意义了啊,它一定是借助这个接口才存在的啊成这呢,就是我们说的这个第一种情况,然后第二种情况,第二种CTRLC啊CTRLCTRLC啊粘过来说呢,这个拉曼DA它需要一个参数,但是没有返回值,这个咱们还得再提到另外一个接口,比如说呢,我们有一个呢叫consumer啊,这个接口接口呢,我们写一个,比如说string啊,哎这样,嗯,原来咱们的写法你知道这个接口我就得去new一个consumer。那这样来写的,在这里边呢,我们这个输出一下,咱们这哎哎输出一下这个S这样啊。那这呢应该都能看懂啊,就是呢,提供这个接口,匿名实验类的对象,然后接着呢,我们通过这个坑点,咱们去调它的这个叫accept的这个方法。第二。
07:02
At怎么还出不来呢?我这呢,是不是没有写这个圈text ctrl X,咱这不是要测试一下是吧。行,把这个呢扔到这,诶这个点后的伤害出来啊,CTRLX放这。好,这时候我们调这个except呢,里边写一句话,嗯,然后呢,他帮我们去输出啊,比如写一句这个叫。谎言啊,谎言和这个誓言啊的区别是什么呢?哎,就先放这是吧,哎,这个你不用去想这个事啊,这个只是一个输出语句啊,这不就出来了啊,哎,这个呢应该都懂,然后下边呢,我们把它呢,改成是一个拉姆的表达式的一种写法。
08:06
诶这样下面呢,我们来写左边呢不变,哎CTRLC放到这,接下来去写的话呢,嗯,右边这块呢,这这都不用不用看了,呃这块呢,你主要定位到我们这个参数,这块是string的一个S嘛,所以你这个位置你就写上这个string的S,然然后呢降到操作符,呃然后呢,你这块呢,呃原来的这个方法体,就它方法体的话呢,是不是大括号,我们呢,也是暂时把大括号呢也先保留着,呃此时呢,你把这个呢,诶CTRLC一下写到这。哎,这样的一种形式。哎,上面这个呢,可能咱整的有点这个太快了,你把这个大框呢,也暂时呢,先给它留着啊。哎,留着。嗯,这个它呢,我们这样换行一下这么着,哎,这个位置呢,你是不是就少一个分号这样。也可以了啊行,哎,下边呢,这边也是这样的一个处理啊。
09:04
这样子一下。你看学完以后,接下来我们通过这个坑一点,咱们去调这个赛方法,哎调列方法,方法呢,我们写一句话,哎谎言和实言的区别是什么呢?他说一个呢是。啊谎言谎言呢,一个是这样,哎听的人当真了是吧,哎一个呢是说的人当真了是吧,哎就写完了,哎我现在来调这个S的时候呢,他这边就实际上调的是你这个具体这个方法体了,就做了一个输出。哎,这边就搞定了啊,这呢是我们说的这个第二种情况,哎,就是我们这里边呢,出现了参数了,这个参数呢,你就完整的这样写出来,哎右边的话呢,原来这个方法的这个方法体从这到这,哎这呢我们仍然给它保留着啊到这儿接着后边这个补一个分号,因为整个呢,你这作为一个对象出现的,哎这个呢,后边哎对象右边不都得有个分号吗?这是第二种情况。
10:05
然后接着我们说一下这个第三种情况。哎,这他啊,第三种情况我们再,哎接着上面这个情况呢,往下去递进的去说行,第三个情况呢,说数据类型呢,可以省略,因为呢,可由这个编译器呢推断得出,我们称作叫类型推断啊什么意思呢,我们基于刚才写的这个点吧。CTRLC一下拿过来,这是刚才咱们写的方式二里边的,在这个基础上呢,我们做一个优化。做个优化,怎么优化呢?嗯,我这呢写的是string,写的是这个string,嗯,而你从上边这块看这个string决定了它,这个呢,这不也决定了它,因为我们下呢,下边这块已经写了string了,所以这块呢,你也不可能是别的类型,所以呢,这个位置其实是可以省的,哎我们就称作叫类型的一个推断了,所以我们就这样啊,到这CTRLC直接呢粘过来啊,这个我们先改成是个二,把这个里边这个string呢就可以干掉了,哎这样来写。
11:20
这呢就称为叫类型推断,哎类型推断这个类型推断这个词咱们呢,应该不是第一次提,想想前面我们哪块见过对犯型的时候,我们这有一个a list写的是一个string,哎,List new1哎,Aist,哎这样的话呢,是可以的,哎那此时这个位置呢,它就是string,哎这呢就是类型推断啊类型推断啊哎这呢是一种,其实呢,我们再往以前呢,还见过,哎你看我现在创造一个印字形的数组,原来呢我们都这样写,这里边呢,我写一个啊123,那咱们说呢,你要是写到一行的话呢,这个是不是也可以省。
12:06
哎,因为呢,你这时候拗,你也不可能拗别的,也叫做类型推断。啊,这个以前也有过这样的经历啊,成这呢是我们说的这个语法格式三。
我来说两句