00:00
然后的话呢,刚才在这里提到了,诶说呢,我们在java.u秀点function这样一个包下定义了比较丰富的函数式接口,那大家呢,就可以去,呃,选择这里边儿的函数式接口呢去使用,那我们看一下都有哪些。啊,这呢,首先列举出来了Java内置的四大核心函数式接口,哎,四大核心函数接口哎,第一个叫consumer。属于消费型的啊,Consumer不是消费者吗?诶消费型的它里边有一个抽象方法,这个抽象方法的话呢,接收一个参数,但是不返回。哎,其实形象点理解,就像消费者,消费者就是你给他东西,他就消费完了,吃完了什么也不返回,这叫消费嘛,所以呢,就是放一个参数,但是不返回。下一个叫做供给supplier,这个供给的话呢,跟消费正好相反。消费你给他东西,但是他不往回返,供给正好相反,你不给他东西,他都往回返,所以呢,你会看到它的参数呢是空的,但是它返回一个值,这呢就叫这种供给型式了,哎,供型的下边这种呢,叫函数型的,函数型的什么叫函数型呢?就是诶函数呢,我们知道啊,会有一个自变量,一个因变量,你放进去一个东西,我给你返回一个东西,这两个类型可以不一样。
01:24
啊,这呢就是一个函数型的,这个叫apply啊,再下面一个叫predictdic断定型或者断言型。嗯,就是做一个判断的哈,所以呢,它传进去是一个T,嗯,接着呢,返回的就是你这个结果到底是true还是false,这属于一个断定型。啊,比如说判断某一个,呃,这个字符串吧,这个字符串的长度呢,是不是大于五,哎,返回的就是个布尔类型,这呢提到叫四大啊基本的函数式接口。啊,这个在咱们后续的这个这个这个API当中啊,咱们会看到有一些呃函数它的这个行参就会出现这样的一些接口啊,大家呢,再去用这些接口给他做实例化的时候呢,诶,你就可以用拉姆达表达式来做了,哎就这样的意思啊行,那咱们这块呢,再写这样的一个例子啊,新建一个class,哎,拉姆达的一个test,哎,这我写个二啊。
02:24
那这个呢,是我们Java相当于内置的啊四大啊,核心函数是接口,看还能记住刚才提到的不。第一个呢叫消费型,对消费型结构叫看诶consumer是吧,它呢有一个参数,这个呢会自动生成一个他了,它那有个参数,哎,这个呢对应的抽样方法啊,叫做accept,就接收嘛,消费就是你把这个东西你给他,但是给他以后呢,他不给你任何的返回,对word长这个样子的,这呢叫消费型的,然后接下来。
03:02
对供给型接口供给supplier,这个呢也是一个T。啊也是一个T,诶它呢跟消费型正好相反,你不给它东西,它都往回反,诶它是长这个样子的。哎,下一个函数型接口,哎,Function函数的话呢,你会有一个自变量一样是吧,哎有个因变量,哎就这样一个情况,哎对于它来讲,哎我们的这个叫啊plan,哎a plan里边呢,你放一个T,我给你返回一个另外类型叫二。哎,这个样子的。型,这叫供给型,呃,函数型还有一个呢,叫对断定型,哎接口哎断定型叫preate predicate这个你传一个T。
04:01
哎,它呢,给你断定一下,你这个是一个true还是false啊,它对应的叫test啊,T的一个T啊,就是这样子的啊这样子的,其实呢,定义了这几个接口以后,凡是大家你要看到其他的有一些接口,以前我们定义过的一些接口啊,只要呢,它长这种类型,比如说让传个东西,但是回来呢,是word的,其实就以后没有必要再去定义了,包括我们自己也是一样,你要定义一些接口,你发现呢,它就是这种形式的,传进去东西出来不反了,就没有必要定义了,你直接呢,就用它这个消费型的就可以了。啊就这种啊行,这呢,我们提的叫四个基本的函数接口,那除了这个之外的话呢,还有其他的一些这个接口,这都是属于一些变形了,那这个咱们等下再说,那针对于这几个的话呢,咱们简单的呃,写两个例子啊来看一下啊来看一下就不一个一个去写了,因为后续呢,咱们这块还有好多关于他们使用的一些这个方法啊,诶我们再去做一个练习,这呢我们写几个例子,比如说呢,关于第一个叫消费型,哎,Public,哎,Avoid这个我们写一个,比如叫哎happy time double型的一个。
05:12
Money,那在这个位置我们写一个消费型的一个叫。哎,Consumer是吧,嗯,消费型的这个呢,写成一个double类型的啊就这个样子,诶在这里边我们怎么办呢?哎,我通过这个它再去调一下,咱们这个叫accept,哎,我把这个money呢传进去。就咱们相当于是写了一个普通的方法,哎,这个方法里边呢,调这个第二个这个对象的一个方法,然后把这个放进去啊,这样行,那咱们在这呢,去调一下这个叫happy time啊。Havetime这个比如传一个500,嗯,再接下来我们呢,需要去是不是填入一个这个接口的实验类对象了,行,咱们先看原来怎么写啊,原来的话呢,我们得去new一个叫consumer是不是这样写,哎,相当于呢,把这个结构呢,整个付给付给他这以前的写法啊,在这里边呢,你可以呃写这个一句话啊。
06:17
嗯,我们写一个C啊说呀这个,嗯嗯学习嗯太累了,嗯,然后呢,去。啊,这个嗯,天上人间听过吧,哎,天上哎人间这500不够是吧,天上人间这个哎,买了瓶矿泉水,哎,然后价格为。哎,对,价格为这个500是吧,这个呢,我就写这个money呗。哎,不是骂你了,这个价格为,诶这个呢,我们应该写这个是吧,诶CTRLC,诶花了那么多钱,哎这样子啊,这个天上人间呢是以前的,然后最近又出来一个白马会所是吧?嗯,这个是迎合不同需求的,因为有两种性别嘛,是吧?行,那这个我就写完了啊。
07:21
这是咱们原来的这个写法啊,这呢相当于我提供了一个具体的我们这个接口的一个实现类的对象了,哎写完以后呢,我们这里边呢,去调的是它,那就相当于是调你这个对象的方法啊,就调的这个方法,这里边呢,这不把这个调了啊,这个咱们不是把你这个money传进去的,这个就传给他了,哎,执行。啊,没问题啊行,这是咱们原来的这个写法,现在呢,咱们用一下,哎这个所谓的叫拉姆达表达式啊正好呢,我们发现第二参数呢,是一个函数接口,那既然是函数接口,那我们就可以直接的用拉姆达表达式,哎,Happy time这个呢,花了这个呃400,哎这块的话呢,我们接下来接下来像这些呢,这都没有必要写了。
08:05
大家都没有必要写,就写个变量呗,那我就要个money吧。哎纳你然后哎这样箭头指示一下这个位置呢,只有一个输出语句这一行,哎大括号呢,也省了直接呢,是不是就把这个拿过来就行。CTRLC来粘过来,最后这个符号它就不要了啊,那咱这是叫money,你把这个呢改成money就行了。写完了就嗯,就是大家呢,刚开始接触拉曼达表达式呢,确实是有一定的困难的哈,就感觉很诡异,呃,本来之前呢,这个呃语法呢,还有的不是特别熟呢,突然又多了一些新的语法啊,真的就是多了是吧?哎,写着写着习惯就好了啊。哎,你像我刚开始写的时候也不太习惯,当然你一旦用起来以后呢,你会发现停不下来是吧,因为确实要简单一些啊来执行。哎,OK啊,哎,这个是矿泉水的,这个是喝了口水是吧。
09:05
喝了。喝了。哎,价格为成便宜点是吧?嗯,行,这个呢,我们是写的这样的一个例子啊,诶大家体会一下,这块呢,是一个函数接口,然后再来一个例子,嗯,再来一个例子啊,Public VO先写上一个二,嗯,再举一个例子吧,嗯,再举一个例子,我们写个什么样例子呢?比如我这public。嗯,我先写成个word啊,我叫filter,诶,String过滤一下这个字符串,嗯,过滤字符串,我们传进去一个这个这个list啊,然后我们再传一个叫predictdic。哎,断言断言呢,我们这块也是个string啊,哎,Pre行。
10:02
哎,你看我这想怎么做啊,嗯,我呢这是一个list,里边放的是很多字符串,然后每一个字符串的话呢,我们经过这样的一个判定,判定以后呢,满足某种规则的,我们就给它返回,哎,是这个意思,那这块我们就得造一个新的啊集合了啊,新的它我们这也是一个string啊。哎,这个我们就叫这块已经叫list了,这个我们就叫一个filter,哎,List可以new一个,哎,Release好,写一个for,循完发循完呢,不妨用个增向for了,S string s冒号list便利一下我们这个行参这个集合啊,然后如果呢,哎,如果咱们通过pre点它有一个呢叫test test的时候呢,把我们的S放进去,集合里边每一个元素放进去啊,如果是个处我们就加到咱们新建的这个集合当中,哎把这个S呢就加进来,那加完以后我们在这呢去return一下。
11:05
哎,Return啊,我们当前的这个filter list,哎,这个return呢,我们把这个位置呢,也现在做一个修改。诶,就这样。哎,这呢想表达意思就是我们呢这呢是一个集合,根据某种规则去做一个过滤啊,具体这个规则是什么,那就看你提供的这个接口实现类的那个方法是想怎么写了啊在这我们简单写啊,就是根据啊给定的啊啊规则啊,然后我们去过滤集合中的字符串啊,那么此规则啊是由哎,咱们这个predictdicate它的抽象方法,它的这个方法决定的啊哎,这个方法呢,咱们马上就要做一个重启了,好,下边的话呢,我们来调用一下,调用首先呢,咱们按以前的这种写法写一下,这样写的话呢,我们得先有一个list,先把这个list呢先造出来。
12:10
哎,这这块我们方便点造吧,咱们有一个AR。There as list这里边我们写几个啊,比如说这个北京啊,南京天津,这个以前发音不准,都以为是天津呢,啊天津啊,对,然后东京啊对,加个西京啊,还有一个啊,普京是吧,嗯,行,哎,现在呢,我这个过滤条件就是找出来这个字符串当中含精的啊,放到一个新的集合当中。哎,就这么着,OK,那CTRLC一下把我们这list呢扔进来,哎接下来接下来的话呢,你需要传一个predictdic的一个实现类对象,哎,这呢A函数接口行,你用拉表示来做啊,咱们先不做啊先呢用一个传统的,那就用一个predictate回车一下。
13:10
那都给我们写的都差不多了啊,这时候返回什么呢?诶我们return一下看看S呢是不是contains经。这样呗。对吧,哎,这呢,咱们相当于是把这个对象呢,就写好了,写好以后,哎在你这个方法里边,是不是就把这个对象呢,在这调了一个方法了,哎相当于呢,就取出来,你看看我们这个例子当中,到底哪里边是包含这个精的啊呃,包含精这个呢,Filter以后,在这个位置呢,我们alt enter一下,哎帮我们就生成了一个啊它这就要氢。我这样写,你看是不是不报错是吧,咱们以前说过这事吧,对,但是大家不要这样做啊。哎,我们这个叫filter at s吧,这样。行,拿到它以后,CTRLC下边呢,我们遍历一下,那咱就简单的直接呢,来一个s out得了啊执行。
14:08
诶这块呢,就是包含这个精的啊,就都进来了,这这块没有疑问吧,你说这块也蒙,这块也蒙,这就不好往下抢了。那得去看面向对象了是吧?这个啊,这个你要还蒙,那就相当于你把这个呢,再抽出来显示的给它附一个名,哎,只能那样了是吧,这个是咱们原来的讲法啊,这块别蒙,这块蒙了,下边没法讲了,因为在它的基础上再改的是吧,在接下来的话呢,咱们这不是想用一下这个叫这个这个拉姆达表达式嘛,拉姆达表达式的话呢,这边还接着来拿过来,这个我介绍个一啊,那右边呢,这块我们还是这个方法的一个调用。诶第二的话呢,一开始还是把这个历史呢扔进去,主要呢,就是看我们后边这个位置了。
15:04
哎,这呢是一个哎函数式接口,又可以用拉曼达表达式,哎拉姆表示往这一看啊,像这些这不都不要了吗。这个也不要了是吧,就SS的话呢,一个变量,我们说这个小括号还省了,诶然后呢,这个箭头操作符一下,那接着呢,你这只有一行执行语句,大括号也省了,Return也给省掉,直接呢就这个呗。CTRLV一下,你看这你看这写了这一堆在这呢,我就一行。那就这样写啊。那简洁是简洁了,当然呢,它的缺点就是难了。看不懂是吧,哎,就这样。所以你要想能够看得懂它,其实大家你还得对它这个抽样方法长什么样得稍微有点感觉啊。哎,得这样了,哎,然后我们再做一个输出。
16:00
哎,这样。成这我们看一下。哎,这张感觉也出来了啊。是不是感觉挺难的,其实不是特别难,它就是语法上那个东西啊,他谈不上说多绕啊,或者说这个多难理解,其实呢,就是你不习惯啊,不熟悉而已,哎,大家你可能下来呢,呃,抽时间写一写,熟悉了就可以了,呃另外一个角度来讲,就是这呢,也不是说大家呢说我这块不会写,我就怎么怎么着了,其实呢,原来呢,这种写法还是可以的,而且呢,还是有大量的人呢,都还是这样去写的。哎,只是说呢,你要是懂这个,而且恰好呢,公司呢,大家开发这个项目呢,都是基于JAVA8了,那你是可以这样去写的,当然也不排除项目经理跟你说,扎巴的新特性,像拉姆的表达式不要用。他为什么说不让你用啊,因为他可能看不懂,或者他能看得懂,别的同事看不懂,别同事要看不懂的话呢,你你们代码万一要这个回头有一个你的工作要交接给他呀,或怎么样,那个哥们还不会不会他还得学一学浪费两天,公司不得多开2000工资嘛,是吧?哎,有这种情况啊,哎,你知道这个实际情况就行,那从长久来看的话呢,这个拉玛达呢,还是一个好东西啊。
17:18
他不会说在后续的这个,呃,这个JDK版本当中,把这个呢又给大家depre了,这个应该不会啊,大家呢,就慢慢的去习惯一下啊,可能呢,你到公司马上呢,不一定能用得上,但是后边慢慢的呢,诶会能应用起来,OK,这呢就是我们关于呃这四个呢,函数接口的一个,哎,举例啊,就举了其中的两个例子,后续的话呢,我们在接下来的这个练习当中呢,也都会见得到,所以就不在这再单独列了,同时的话呢,我们会看到这儿呢,还提供了一些其他的啊,我在这个PPT里边写的。啊,就是刚才提到这个四个核心的,或者叫基本的,那还会有这样一些,这个呢,叫BI fo BI就是bary,就那个二的意思啊,其实呢,就是一个二元函数。
18:06
嗯,你说二元函数,有同学懵了,有啊,俩变量两次变量啊,这叫二元,我们刚才看到这个方式呢,是只有一个参数的,然后返回一个类型,现在呢,它有两个参数。而且这俩类型呢,可能还不一样啊,就是这个样子的,然后下面这个呢,是作为function的一个子接口,Function的话呢,我们说有个自变量,有一个返回的值,一个是T,一个是二,它呢作为子接口就说诶这俩都一样。放进去是T类型出来的还是T类型,哎这种,那再接着再接着呢,是这个BI的一个BY,你叫BY也行啊,By function它的一个子接口,它的子接口啊,就是你这里边的TR都是一个类型的啊,就长这个样子的啊by consumer啊两个。哎,消这个这个行参消费两种类型,嗯,然后by predicate,哎,这个返回的还是波尔型的,当然呢,你也是两个类型。
19:03
啊,这就相当于是加了一个变量啊,那下边这块呢,是我们能够把这个T类型的啊,让它呢,转化出来以后都是int long或者double的对应的这块正好反着啊,实际上这个这三种类型呢,转换完以后呢,才得到的是这个类型啊这块呢,大家稍微关注一下这个这个不用太多关注,上边这块呢,变形的有可能在后续的开发当中,你会见到类似的这样的一个函数,诶你知道凡是以后。凡是以后大家开发当中,你见到了这几个函数了,呃,这几个接口应该叫这几个接口,或者是这几个接口。哎,你要知道,哎,他们呢,在实例化的时候都可以用拉姆达表达式啊,只是说你用不用那是你自己的事了啊,当然呢,说是可以用相当于啊好这呢,就我们提了一下这个,哎,这个Java内置的几个函数式接口。
我来说两句