00:00
好了,那么刚才呢,咱们对这个拉姆达表达式呢,它这个语法格式啊,包括它对这个代码的简洁度啊,对吧,包括它的方便的地方呢,我们做了一个简单的了解,那么接下来呢,咱们就对这个拉姆达表达式呢,进行一个学习,对吧,就是一种新的语法格式,我们学完了之后,大家就可以灵活的运用了啊,来个叫test LA。说这个叫做拉么达的基础语法对吧,拉么达表达式的基础语法对吧,我们说实际上张八它在这个在张八中它引入了一个叫做新的操作符对吧,我们说张法八中它引入了引入了一个叫做新的操作符,那么这个操作符呢,就是这个叫做箭头操作符对吧,说该该操作符我们称为叫做箭头操作符,或者是叫做LA的操作符对吧,对吧,我们说招法中它引入了一个新的操作符,叫做箭头操作符,或者称为拉姆达操作符,我们说这个箭头操作符呢,它将整个拉姆达表达式呢,拆分成了两部分对吧,我们说这个箭头操作符,箭头箭头呢操作符它将这个。
01:28
拉姆达表达式表达式拆分成对吧?拆分成两部分,那么哪两部分呢?无非也就是左侧和右侧这两侧对吧?一个是左侧,一个是右侧,我们左侧通常写一些什么内容呢?所在的左侧那就是对应拉姆达表达式的参数列表,就是拉姆达表达式的参数列表,还知道什么是参数列表吗?做方法的参数列表呢?对吧?那么拉姆达表达式的这个左侧,箭头操作符的左侧就是对应拉姆达表达式的参数列表,右侧呢?那么就是你写拉姆达表达式中对吧?拉姆达表达式中所需要执行的功能,你就把它写到箭头操作符的右侧,那么这个右侧我们称它为叫做拉姆达体,就是我们所说的拉姆达体。
02:26
能听懂啥意思吧?对吧?我们说新的方程符,它将整个拉姆达表达式分为左右两部分,左侧那就是拉姆达所需的参数列表,右侧那就是你这个拉姆达表达式所需要执行的功能,我们称为拉姆达T,对吧?那么刚才大家已经发现了我们的所谓的这个拉么达表达式,那是不是就是对那个接口的实现,那是不是对接口的实现吗?对吧,就是说之前我们用匿名类不类是不是实现接口啊,现在我们就可以用拉姆表达式去实现这个接口,那我们说这个拉姆表达式中怎么写?说左边这个参数列表是什么参数列表,右边拉姆达体又是什么呢?对吧?实际上我们说这个接口中它是不是有个抽象方法呀,对吧?所谓拉姆达表达式左侧的那个参数列表对应的就是你接口中抽象方法的参数列表分数。
03:26
有几个就写几个对吧,那么相应的,那这个箭头操作符呢,右侧那就是你需要对这个抽象方法的实现的功能,那么就写到拉姆达表达式的右侧,能看懂了,我再说一遍啊,箭头操作符的左侧是不是对应着你这个接口中抽象方法的参数列表啊,箭头操作符的右侧,那是不是就写你对这个抽象方法实现是不是就可以了呀,对吧,就可以了,那有些同学就想问了,说哎,那我这个直接拉么到表达式啊,它默认是不是就找的那个抽象方法实现的呀?那假设说我这个基尔平要是有多个左阳方法,那我们说那这个拉曼达表达式它默认实现的是哪个呢?
04:13
是不是有这样的疑问对吧?那么实际上我们说什么呢?一会呢,我们会学一个叫做函数式接口拉么达表达式,它需要一个函数式接口的支持,所谓的函数式接口就是指你这个接口中只有一个抽象方法的接口,我们就称之为函数式接口,听懂吧,对吧,那我们一会再说好了,那么这就是拉姆达这个语法的一个基本的一个情况,对吧?那么实际上呢,在这种情况的基础之上,拉姆达表达式呢,它有几种变化的形式,咱们一一给它列一下,对吧,比如说叫做语法格式一对吧,什么意思是我们对应的几种情况,对有什么情况,因为我这个抽象方法它是不是出现很多情况啊,比如说有的是有参数的,有的是没参数的,有的是多个参数的,就是这种情况,或者说有的方法有返回值,有的方法没返回值吧,对吧,这都是对。
05:13
定的很多种情况,对吧,那么在这个的基础之上,咱们把这几种情况列一列,首先第一个呢,咱们就试一下,比如说你那个接口中的那个抽象方法呀,它是无参并且无返回值可以吧,对吧,叫做无参数,同时呢还无返回值的一个方法,那么这样的话,拉姆达表达式我们会怎么写呢?那么那么箭头它是不是箭头操作符将它分为左右两侧呀,左侧数对应的参数列表,那么参数列表,那无用三,那我们写什么呢?那你就直接写一个小括号对吧?然后后边是不是跟上箭头操作符啊对吧?那左侧无三是不是就直接一个小括号,然后箭头操作符右侧是对这个接触的实现的功能吧,对吧?比如说我就想来一个打印,那我们是不是就直接c out print line,然后这里打印一个叫做hello,对吧?Lada是不是就可以了,对吧?那么过来呢,我们就试一试,比如说呢,现在呢,我们说拉姆的表达式,你是不是需要这个接口的支持啊,确切的说是需要函数式接口的支持吧,那么这个时候我们是不是找一个接口,接口里头有个抽象方法,并且这个抽象方法是无参,并且是无返回指动,以前大家见过类似于这样的接口吗?什么?
06:39
比如说reable对吧,Na是不是reable可以啊,对吧,比如说啊对吧,我们说原来咱们先对比一下,我们说原来要是想对这个reable进行实现的话,我们说不定就得这样写,对吧,你用一个runable对吧,然后呢,对里边的这个抽run方法是不是进行实现呢?在这里边我们可能写一下叫做hello hello word吧,从hello word呀,对吧,那这是原来我们需要通过匿名内不内的方式去实现接口。
07:10
看懂了,而现在我们可以怎么样呢?来一个我们现在我们是不是匿名,累不累可以用这个拉么达表达式来充当啊,对吧,我们就可以怎么写叫做run,比如说叫R1等于谬一的扭去了,是不是一个小括号啊对吧,对吧,因为它左侧是无层呢,然后一看箭头操的符啊,后面竖不直跟着实线呢,那就直接是不是叫CS,来一个叫做hello,对吧,Lada可以对吧,那这个就是对应的实现,这是上面,这是现在的lada表达式是不方便了许多呀,对吧,那我说那就怎么用呢,原来怎么用,现在的这个就怎么用,比如说原来我们说应用的时候是不是调用什么star或者run方法呀,咱们就以run为例了,比如说R点啊,Run,对吧,那下边这个是不是一个都一样啊,那你就可以R一点是不run方法对吧,对吧,R一点。
08:10
来,那我们看看效果是不是一样的啊,右键执行上面是不是hello word下面是不是hello了们对吧,是不是一样啊,原来可能用这么多句代码完成,对吧?但实际上关键的可能就这一句,而现在你只要把关键的提取出来就可以了,这就是拉姆达表达式。这能听什么,是不是方便了许多呀,对吧?那么当然呢,在这个拉表达式中呢,它也有一个小的注意事项,大家注意一下,大家还记得这个逆名内部类,原来咱们写说了个或者说叫做确切说叫做局部内部类吧,对吧?局部内类原来有个注意事项,说如果我在这个局部内部内中应用了一个同级别的局部变量,比如说in的number等于零,然后呢,我在这里呢,用到了这个number在JDK1.8以前有没有什么规则?对说那如果说在局部内部内中应用了同级别的局部变量时,那么该变量必须是怎么样啊是不对吧,是不是得发啊对吧?说这个K1.7以前它必须是final,但是现在你看我保存了,保存了。
09:33
我执行对吧,发现过没过是过了呀,这零啊对吧,那零,那我说那我要,那么那能可以加加了吗?那是不行了,这改变还是不能改变,那还义就是它本质上还是什么东西,这不还是坏了吗?只不过现在不需我们手动加上了,他说默认给我们加上来呀,对吧,那道理在下边这里也是一样的,我这里能不能用number呢?可以吧,我能加加吗?是不是一个道理对吧,这个就是有点很,就是跟匿名类不类似,不是一个道理的呀,对吧,跟匿名类不类似,一个道理对吧?实际上拉姆达表达式啊,我们称它为叫做语法堂对吧,或者说叫糖一语法对吧,实际上它底层就是一个底层,就是一个函数嘛,就是一个方法吧。
10:22
对吧,它这底层就给你封装成了一个方法而已,只不过我们写起来用起来比较简单了,就我们程序员是不是方便了很多呀,对吧对吧,在这里呢,我们需要注意一下就可以了,G点八是不是你final不用加呀,对吧?但是你虽然不要加,它实际上还是一个final,只不过可以省略不写而已,听懂吧,啊好了,那么就是呢,那照八表达式的第一种语法格式,就是你需要实现接口的那个称算方法,无参并且无反回值,对吧对吧,咱们还有语法格式二,叫做语法格式二,对吧,实际上啊,语法格式整体成围绕着这个呀,只不过那个抽象方法有几种变体,对吧,咱们稍微的都试一试,下一个咱们写个什么呢?比如说有一个参数可以吧,然后呢,有一个参数并且有返回值行不行,对吧,说有一个参数对吧,并且有。
11:22
返回值的一个方法可以吧,说有一个参数并且有返回值,嗯,这样吧,有一个参数并且无返回值吧,先来个无返回值,说无返回值的一个方法,那么咱们找一个什么呢?同学们在下边写,那是不是我说拉姆达它得有个接口的支持啊,我们是不是来看随便来个接口啥的,对吧,对吧?那这个时候呢,我们找一个接口发八中呢,它有这样一个接口叫做consumer,对吧?这个consumer里边是什么东西呢?我们可以简单的看一下,我们现在拉是不是就要对它实现呢?对吧?说这个接口里头有啥,你不知道,你就点进去瞅一瞅,这里是不是有一个抽象方法啊,这个抽象方法有啊,一个参数吧,有返回值啊,对吧,没有返回值,那么我那么达操作符的左边是不是写这啊,右边是不是就这它的实线呢,对吧,那这个时候我们过来左。
12:22
左侧左侧是不是一个小括号对吧?参数列表我是不是传一个X啊,随便传对吧,你要是叫Y叫啥都行听懂了,比如我现在就叫X,然后呢,是就是箭头操作符右侧是你需要的实现吧,对吧,我在这里还是咱单的打印输出,这次把X的值打印输出就可以了。蹭的话,那这样的话,我什么拉达表达式对这个接口就行做了一个实现呢,实现了以后,我们通常是不是接口中的方法我就能用了,对吧?比如说c.accept我要传一个什么呢?传一个叫做我的上规5V5可以吗?对吧?那这个时候右键运行它是不是就把我大双V5V5给我打印了呀,对吧,把这个参数传过去,然后把它打印输出。
13:16
是这样写的吧,对吧,那么拉姆达表达式就是对这个接口中这个抽象方法的一个实现,看懂吧,好吧,那么这个呢,就是有一个参数对吧,然后呢,无返回值的一个拉姆达表达式。这有用的对吧?然后呢,下来再说什么,还有什么情况呢?我们说语法语法格式三对吧,比如说呢,我们说现在呢,这个参数呢,它有一个参数对吧,说只有一个参数呢,然后呢,并且呢,无返回值对吧?无呃也是无返回值啊我给大家示一个什么呢?就是说如果左侧只有一个参数,或者说这么写大家更更清楚了,说若说只有拉姆DA表示只有一个参数,对吧?那么那个参数的小括号,小括号可以省略不写,说你这个参数要是只有一个参数的话,这小括号是不是可以省略不写呀,比如说以这个为例啊,左侧是不是只有一个参数,那么要是有一个参数的话,小块就可以省略不行,然后在这里右键运行好了,不竖口。
14:35
啊对吧,你只有一个参数的话,小括号可以省略不写,但是呢,我们习惯上这个小括号写不写呢?对吧,习惯上就干脆给它写上得了,因为小括号是不是也不麻烦呢?对吧,也是不麻的,那么通常呢,我们可能用这种的方式比较的多,对不吧?对吧,有一个参数小括号,这省了不写了啊那么接下来呢,咱们再换一下一种说语法格式四对吧,我们来一个什么呢?叫做有个参数对吧,或者两个或者是多个,是不是一回事呢呀,对吧,说有两个对吧以上的参数对吧,然后呢,并且对吧,拉姆达体中,拉姆达体中有多条语句,这你看懂了对吧是吧,拉姆达体中有多条句,然后并且呢,有返回值,有返回值,有两个函数有返回值,并且拉姆达体中是不是有多条语句啊,对吧,那这个时候该怎么。
15:35
也呢,那这个时候呢,我们试一试,叫做at test,来个TEST3,那是不是随便找个接口啊,有两个参数的,并且有访问值的对吧?然后compare行不行,是不是可以啊对吧?比如说这次比什么呢?比较大小是比两,比两个in可以对吧,叫C肯定就shift o,然后呢,箭头操作图来左边写什么是不三数对角了对吧,就是你不知道你忘了怎么写,就看看人家的抽象方法呀,是这东西有两个参数了对吧?那有两个参数,那我箭头操射符的左侧是不是传俩参数,比如说一个X一个Y对吧,然后键成操作符的右侧。
16:20
这次我们是要写多条语句吧,对吧,不仅不像之前的时候就一条语句啊,现在要写多条,所以如果要是有多条语句的话,那么拉姆的体必须使用大括号。听懂没说,如果你有多条语句,那么拉姆达体必须使用大括号,然后呢,在这里你就可以写相应的功能,对吧?比如说这是函数式接口对吧,我就随便写,输出一句话就是代表多条语句啊,并且它是不有反问值啊,那你就直接return,比如说in点点compare对吧,X和Y比较一下即可。
17:01
都能看懂吧,对吧,那这样的话呢,就是如果有多条语句的话呢,那么我们这个就是这样写的,所以有两个参数,并且呢,有多条语句就这样写,能听懂吧,对吧,对吧,如果有两个参数,有多条语句的时候,就这样写。那么接下来相应的,那假如说格式五对吧,叫做语法格式五语法格式五对吧,那说如果有两个传数,并且有反回值,但是拉姆达体中是只有一条语句啊对吧?说弱拉姆达体中它只有一条语句的话,对吧,一条语句那么那个return,注意是return嘛,和大括号,大括号都可以省略不写对吧?就还是以这个为例说,如果说只有一条语句啊,来个是说如果只有一条语句,你大括号是不是可以省略啊对吧?只有一条语句是不是只有一个返回值的呀?对吧?那么这个return呢,它也是可以省略的。
18:18
看懂吗?对,如果只有一条语句,大括号和return都可以省略不写。看懂啥意思吧,是吧,说如果只有一条语句,大括号和都可以省略不写。这没问题吧,对吧。有问题吗?没有哈,对吧?那这就是另外这种语法格式对吧?说只有一条语句呢,大括号和return你都可以省略不写,那么最后一个呢,大家似乎现在已经发现了,叫做语法格式六,对吧?我们发现在我们应用的时候,这里写过数据类型啊,黑元素列表我数并没有写数据类型啊,对吧?那我说这时候写行不行呢?比如说X和EY,按理来说是不是都是EDC啊,那么你要写呢?那你就得全写,看见没?但是我不写行不行,说不写也可以呀,我说这是为什么呢?注意婷这是一个新的啊。
19:23
说说这个什么拉姆达表达式的参数列表,拉姆达表达式的参数列表的数据类型对吧?可以省略不写,为什么可以不写呢?因为Java的gbm的编译器对吧?Gbm的编译器它可以通过上下文推断出对吧数据类型,那么这个过程我们称之为叫做类型分断,所以说如果说你这里参数列表中本来是不是应该有数据类型啊,但是这个参数列表中的数据类型它是向上面是可以省略不写呢?因为在张二八中,或者是不是张八对吧?因为张va gdm这个编译器它可以通过上下文能够推断出数据类型是什么,这个过程我们称之为类型推断,说怎么叫做通过。
20:23
正向文能推断出类型呢,比如说你如果这里不写参数,不写这个数据类型的话,前面指定没有这里说指定的啊,对吧?换句话说,或者是什么呢?当你在这里指定的话,我这个是不是实现compare中的抽象方法啊,它会到这个抽象方法中去看这里的数据类型吧,你在刚才声明的时候,这里是不是指定了in,那这说就是in,它通过目标的拆数列表已经推断出了你X和Y的数据类型了,所以说就不需要我们去写了,这个过程就称之为类型推断。
21:05
这能听懂了吧,对吧?他通过目标的上下文已经推断出数据类型,所以说这个数据类型我们就可以省略不写,实际上这个类型推断早在以前我们就已经用过了,对吧?比如说在以前什么情况下用过呢?大家应该都见过这个东西叫做word test5比如说大家见过这个,比如说来个这,这是不是数组啊,它是不是有个简单初始化,再来个AAA,来个bbb,来个CCCC,对吧?后边这部分我指定类型了吗?那你说这类型是哪来的,那是不是就是推断出来的呀?通过上面函数推断出来这到底是个什么类型的数据,对吧,对吧,这是推断出来的对吧?这就是为什么我们说你这样的简单数组,你写一条语句可以,你拆分开来写可以吗?说你想拆分开来写行吗?试过吗?没试过呀,你拆开可以吗?是不可以的,你要是拆开写,它能推断出,通过上下文能推断出这是什么类型吗?是不就推断不出来了呀,对吧?那这就是类型推断,实际上看懂吧,对吧?那么还有什么呢?还有这个1.7之后我们是不是集合我们可以这样用呢?比如说使string list上用一个a release,是不是直接一个箭头就监控号就完事了,Ctrl shift o导包这里是不是可以不写啊?那你说这数据类型哪来的,是不是也是通过上下文推断得出的呀?对吧,对吧,这就是类型推断方法七在之前这个类型推断就有了,只不过在Java方案中,他对这个类型推断进一步的给人升级了,对吧?升级成什么样了呢?比如说在JAVA8中,我们甚至写这样一个方法。比如这。
22:57
这里呢需要一个map,这里需要string和in,是不是在唤行啊对吧,然后来个map对吧。
23:07
Map就Q包下是不是这样写啊,那么在JAVA8中对这个类型推断怎么升级的呢?我们现在调用这个so方法的话,我只需要传一个用一个哈希map间括号就可以了,这个肩块里边的内容我们都可以省略不写了。看懂了,他说通过你目标就推断出这都是什么类型的呀,对吧,所以说你可以省略不写,如果同样的这两条语句放到GDK1.7中,那编译是过不了的,推断不出来。是吧,这是1.7中是编译不过的,对吧,咱们就不试了,因为切换一下还挺麻烦的,对吧,有兴趣大再下去自己是试一下啊,对吧,其中是不行,那么张发是不是对这个类型推断进一步的升级了呀,对吧,所以说他通过目标对吧上下文就推断出了类型是什么,那这个就是我们所说的类型推断对吧,如果说。
24:12
参数列表中的这个数据类型你都可以省略,编译析都能给你推断出来,那么以上呢,就是整个张螂方呢,他围绕着这种情况,是不是对于这个实现方法的几种情况啊对吧,几种情况实际上整体说在这啊有问题吗?感觉乱不乱还好,就是分左右两边对吧,对吧,那没事乱的话呢,给大家给大家总结一下吧,对吧,我们拉DA这个表达式是什么情况呢?说这个左右左右如果寓一,那个括号是不是可以省啊对吧?左右E1括号省什么意思,就是当你拉到左侧这个箭头操作符左侧只有一个参数时,小括号能不能省,哎,那尖头操作符右侧只有一条语句十大括号能不能省,是不是可以省啊对吧?还有就是左右E1括号省对。
25:12
啊,还有什么呢?叫做叫做左侧左侧推断对吧?叫做类型声什么意思,就是你左侧箭头操作符的左侧对吧?它有一个类型推断,可以通过目标上下文是推断出参数列表的数据类型啊,所以说你这个数据类型可不可以省略不写是不是可以啊,这就叫左侧推断类型省通顺吗?左侧遇一括号省左侧推断类型声,这叫上联对吧?这叫下联对吧,那还需要一个啥呀,横批,横批怎么写呢?叫能省则省对吧,能省则省对吧,就是实际上呢,做的右侧的左右两这个左侧和右侧对于你需要实现方法的几种情况啊对吧,然后呢,Java方中它为了方便,是不是有一些东西是可以省略不写的呀,对吧,就是这几种情况啊,就这几种情况,当然它有一个呢,我没编进去是什么呢?就是这个return对吧,你要是右侧是不是有一条语句旅客人都可以省啊,我编不进去了啊,你们下去把它编进去行吧,对吧,那么那么说简单说一下,你说虽然说这个这个或者说这样这种情况,这个有类型推断了,对吧,我们说这个数据类型可以省略啊。
26:40
对吧,那我们说是写好呢,还是不写好呢,对吧?这个呢,实际上就看看个人了,对吧?啊,但是我认为不写好对吧?啊,为啥不写好呢?因为人家张二八为了让我们方便一点,他把类型推断是不是给我们升级了呀,目的是不是就让我们方便一些,那你再给他加上对吧,人家费了好大的劲,好不容易整个类型推断完了,你说你也不用对吧,非得给它加上,那是不是有点多余啊,都说了他是底层是不是啊,他说是什么呢?注意这个呢,实际上这个数类型推断它也是语法堂。
27:25
是吧,就是写起来方便,但是那些类型检查该检查时候还得检查呀,对吧?类型检查还是有的,只不过语法你写书写起来变得方便了而已。其他的没有任何的,你指的是哪一句话耗性能了呀,他不耗性能啊,你原来怎么用,原来的是什么样的类型,推断它就是什么样的,原来你是不是也要做一些类型的检查呀,编译的时候要不要第一的时候肯定会有类型检查的,你现在写的时候他依然有类型检查。
28:04
对吧,类型推断它只不过写起来变得方便了,叫语法堂嘛,对吧,就是写起来变得方便了,但是实际应用上这个类型的检查它还是要做的,就相当于我们增强肺循环一样,增强肺关变异集合前排生方面呢,底层它是不是也是一程类根迭代器呀,对吧,就是这个东西就让我们变呢,就是让我们方便而已,其他的性能没有没有区别。听懂了对吧,所以说呢,我建议呢,大家呢,还是使用这种对吧,因为人家招渣发工程师费了好大劲是不搞了个类型推断的升级对吧?然后呢,我们再给人加上都不用是不是不太好啊对吧,就像是说那个苹果手机一样是吧,说人家那个苹果手机的工程师是吧,费了好大的劲,耗资了多少多少个亿对吧,把那个苹果手机是不薄了一毫米对吧?然后咱们买回来的时候贴个膜套个壳是吧?啊行了,那有这个功能呢,咱们就拿过来用好了,这就是妈妈的表达式的几种情况对吧,整体还是就是左侧对应参数列表,右侧就是你执行的功能,然后呢,有一些东西可以省,那我们能省就省一省,是这意思吧,对吧?那么大家此时应该已经注意到了,我们说M妈的表达式,它是不是需要接口的支持对吧?并且接口中。
29:33
那抽象方法还不能多呢吧,不然它说这没法区分它实现的是哪个抽象方法呀,因此我们说二我们说叫做拉姆达表达式,拉姆达表达式它需要叫做函数式,函数式接口的吧支持对吧?那么问题就来了,什么是函数式接口对吧?什么是函数式接口呢?哎,对,说若接口中接口中只有一个抽象方法的接口,那么我们就称为叫做函数是接口对吧?说若接口中只有一个抽象方法十,那么这个接口就称之为函数式接口,比如说刚才咱们是不是自己写了个接口啊,叫my predict,它是不是里边就只有一个抽的方法,那么它就是一个函数式接口。
30:30
是不是,那么这个函数式接口呢?我们可以使用一个注解,叫做可以使用,可以使用叫做注解叫什么呢?叫做at functional interface修饰一下,所以用at functional interfa修饰了以后,它能干什么呢?它可以对吧?叫可以检查是否是函数式接口对吧?它可以检查这个接口是不是函数式接口,比如说我们过来看这个main predicted对吧?我是不是可以用at personal interface修饰一下啊,对吧?修饰了以后它有什么效果呢?就就是说明这个接口它必须是一个函数式接口,如里头是不是只能有一个抽象通完啊,如果说你想写多个抽样方法,这时我再来一个。
31:24
那是不是就不过了,对吧?但是你这个没有at functional interface修饰是不是就可以过呀,对吧?那么含义也就是说这个at functional这个注解修饰的接口必须是函数式接口,里边只能有一个抽象方法,而我们拉姆达表达式就需要这种函数式接口的支持。这能看懂吧,对吧,好了,那么以上呢,就是一个拉姆达表达式的一个基础语法,那我们们搞了半天,我们到底要怎么去用它呢?对吧,刚才实际上咱们是不是都用过了呀,简单的用一下说需求,比如说现在我们干什么呢?我就是要对一个。
32:09
数进行运算吧,对吧,这进行什么样的运算咱们暂时不管,就是四数最高运算,或者是平方运算,或者是让它什么乘以一个数加上一个数等等,类似于这样的运算可以吧,对吧?说需求和对一个数呢进行运算,说什么样的运算我们到时候再指定,那么这一次呢,我们想要如果说想要用拉姆达表达式来实现的话,那我是不是得搞一个函数式接口的支持啊,对吧,比如说我在这里呢,首先可以搞一个。接口,比如说叫my function吧,可吧,对吧,My function my function呢,然后他说是对一个数据行运算呢,对吧?当然我们接口是不是一接口啊,Interfa对吧,我们说是接口,你可以声明成泛型的,带泛型的,你要是不想声明成带泛型的行不行所也可以啊,带不带泛型无所谓啊,那这时呢,我说返回一个inte,比如说叫get value,你传过来一个inte,我返回一个inte可不可以,对吧?那只有一个抽象方法的接口,我们说这个接口是S术式接口,可以使用at functional interface修饰一下,修饰了以后过来之后怎么用呢?我们可能写这样一个方法叫public,对吧,嗯嗯,返回吧,返回in,对,对吧,叫做。
33:40
运算运算op对吧?Op是不是operation呢?运算是不是对一个数进行运算呢?对吧?那对于这个数你要进行一个什么运算,你说不能指定死啊,写死了,就像原来那种情况,你说每个都得写一个方法呀,现在我们用MY是方就可以了,比如说MF对吧?做对这个number做什么运算呢?你就可以return mf.get y6吧,是吧,Number传过去。
34:12
对吧,这样的话,这个接口是不是就用上了,但是具体做一个什么运算是不是没指定对吧,那这个时候方法写好了,我们是不是就调用啊,调用叫做operation这个方法的时候呢,比如说我要对一百一百做一个什么运算,注意后边是不是一个接口,现在我们是不是可以用拉姆达表达式实现这个接口怎么实现。是不是箭头轴的不分左右两部分呢?左边对应参数列表个参数列表,人家需要一个,是不是需要一个啊对吧,一个参数,那in可不可以省略对吧?我们说不省就是这样写,那当然我们说有类型推断可以省略的对吧?然后是箭头操作符里让是实现呢,比如说我要对100进行一个平方操作。
35:03
对吧,X是不是就是那个参数啊,X乘以X是不是就平方操作对吧,对吧,对吧,那拿到这个结果我们是不是可以,呃,接受一下啊,对吧,叫做in,呃,Number吧,拿到拿到这个结果呢,我们face out一下number对吧,这是右键运行是不是搞定了对吧,就搞定,那现在我们说不仅可以平方操作吧,对吧,我现在是不是可以指定,只要你对一个数做什么样的操作是不是都可以啊对吧?那比如说我现在再来一个,我调用operation对吧,Operation operation呢,比如说我要对200算一个加法操作,比如说算一个X,对吧,当然不仅仅是X,你要是叫别的是不是也可以啊,然后算一个Y加上200的操作,是一个加法运算呢,对吧?加上200少个括号吧,是不是少个括号对吧,那这时右键运行。
36:10
是不是搞定了,那接下来说任何运算你都可以指定的呀,对吧,好了,那么以上呢,就是LA么达表达式难吗?难这不难呐,对吧,就看你目标实现那个接口中抽象方法是什么样的,我们拉姆达表达式是不是就怎么写啊,左边是参数列表,右边是方法体出来了就是对吧?行了,给大家几分钟时间。
我来说两句