Java基础36:函数式编程

Posted 刘小爱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础36:函数式编程相关的知识,希望对你有一定的参考价值。

今天是我自学Java的第35天。

感谢你的观看,谢谢你。

话不多说,开始今天的学习:

现在直播一直都很火,今天我们就用Java代码简单地模拟一个直播案例,以此来一步步说明什么叫函数式编程。

不要看这个名字好像挺难懂的样子,其实很简单,两分钟时间即可看完。

一、直播间案例

现在有一个直播平台,它如何管理那些想直播的人?很简单,制定规则就好了,在Java里面接口的作用就是制定规则。

【Java】基础36:函数式编程

①有一个接口叫LiveRoom,就是直播间。

你想要直播?很简单,实现直播间接口就好了,实现了你就能开个直播间直播了。

②LiveRoom接口里有一个抽象方法叫live()

表示的就是直播间直播的什么内容?

你播游戏也行,播唱歌也行,播吃饭,播睡觉都可以,所以我用一个抽象方法表示直播的内容,你具体播什么我不清楚,都可以。

你实现我这个接口了,必须要重写live方法。

简单地理解就是,你必须得告诉我你直播什么,我才能让你直播,不然你不能有直播间。

规则制定完毕,好,现在有一个直播间,在玩游戏,一看直播间名字,哦,叫刘小爱。

这个用Java代码如何表现出来?

1.最常规代码

【Java】基础36:函数式编程

①创建一个刘小爱类

实现LiveRoom接口,刘小爱既然能直播,肯定是实现了直播接口的。

②重写接口里的live方法

刘小爱直播的是啥?哦,原来是魔兽rpg游戏。

③创建刘小爱对象

将刘小爱对象作为参数传入method方法。

④method方法

直播间会调用live方法,输出正在直播什么内容。

所以运行代码,控制台就会输出:“玩魔兽rpg游戏”。

现在问题来了,代码能不能简化?

可以的,使用匿名内部类就好了。

2.匿名内部类

我既然是看直播,直播间名字叫啥重要么?

直播间叫刘小爱也好,叫刘大爱也罢,哪怕是叫刘老爱都无关紧要,我是要看直播的内容,那我完全可以不用创建刘小爱类。

代码如下:

【Java】基础36:函数式编程

⑤匿名内部类

既然名字不重要,直播间没有名字了,那就直接用父接口LiveRoom的名字代替就好了。

new LiveRoom(){},这表示的就是LiveRoom的子类(实现类)对象,也就相当于是常规方法中的刘小爱对象。

匿名内部类省略了类名,不用创建一个实现类,所以更简单。

那还能不能再简化?

可以的,也就是今天的重点,函数式编程。

二、函数式编程

函数,这个概念我们在数学里面我们就接触过。

y=f(x)(y=x+1)这就是函数的格式,其中f是函数名,x是变量,y是函数值,还有定义域,值域什么的。

你发现没有,Java中的方法其实就是一个函数:

方法名不就是函数名么?参数也就是函数中的变量,返回值也就是函数值?它们本质上是一样的的,只不过叫法不一样,并且在有的编程语言中方法也就叫函数。

前面无论是最常规代码还是匿名内部类,它们都有一个重点:LiveRoom接口中的live方法,也就是重写后的方法。

函数式编程就是依据这个方法来的:

⑥Lambda表达式

lambda,中文翻译过来就是拉姆达,还记得数学中:λ这个字符么?说的就是它。

lambda表达式表示的是什么?本质上就是LiveRoom接口中的live方法。

  • 没有参数,就用一个()表示;

  • 有参数的话,就将参数写在()里面;

  • 输出的内容为重写后的方法体;

  • 如果有返回值,就用return返回;

  • 如果没有返回值,return可以省略。

什么叫函数式编程?

就可以理解成用什么参数执行了一件什么事情,这就是函数式编程,它是匿名内部类进一步的简化,可以让代码更加的简洁。

但它有一个使用的前提,接口得是函数式接口。

什么叫函数式接口?

有且仅有一个抽象方法需要被重写的接口。

这个怎么理解?很简单,函数式编程和匿名内部类相比,它省略了啥?

它省略了接口中的方法名,为什么可以省略?

因为就只有一个方法,那就算省略了方法名字,也知道是用的那个方法。

这就好比你是家里的独生子,那你爸妈回来叫你宝贝,叫你甜心,叫你小兔崽子,别人都知道你爸妈是在叫你。

但如果你还有个弟弟,你爸妈再这么叫你,别人就搞不清楚你爸妈到底是在叫你,还是在叫你弟弟了。      关于函数式编程暂时就先介绍到着,以后有经典的笔试题会用代码再次演示,毕竟实战才是王道 。                                            总结:

以上是关于Java基础36:函数式编程的主要内容,如果未能解决你的问题,请参考以下文章

36 函数式编程

Java基础篇(05):函数式编程概念和应用

Java8 函数式编程——基础篇

Java8 函数式编程——基础篇

Java响应式编程 Springboot WebFlux基础与实战

Java8函数式编程 数据流和lambda表达式