首页 / 知识
用通俗易懂的大白话搞明白Java里的函数式编程和Lambda表达式
2023-04-11 16:28:00

为什么引入函数式编程,lambda表达式?
大家都知道,JDK1.8引入了函数式编程,lambda表达式。
那有没有想过,为什么引入这个东西?没它之前我代码不也写的好好的吗?
我个人的理解,JDK的每次升级,无非是围绕三方面:提升安全性、提升效率、简化书写。
比如:
1、JDK1.5引入泛型,是为了安全性方面的考虑;
关于泛型的知识,如果感兴趣,可以看我之前的文章:Java基础知识之泛型以及自定义泛型
2、JDK1.6引入自旋锁、偏向锁、轻量级锁等等一些手段,对synchronized进行优化,是为了提升效率;
关于synchronized以及这些锁的升级过程,感兴趣的话,看我另外一篇:Synchronized、偏向锁、自旋锁、轻量级锁以及锁的升级过程
3、而JDK1.8引入函数式编程,主要是为了简化书写。
关于函数式编程和Lambda表达式,本篇来讲
你可能需要了解的一些东西
首先需要简单了解一下函数式编程的思想:函数式编程的思想简单来说就是,可以在书写代码的过程中将一个行为过程作为参数进行传递,主要目的是为了简化书写
它的底层实现其实还是匿名内部实现类,不懂匿名内部类的需要补一下基础知识
函数式接口最大的特征就是,这个接口里只能有一个待实现的方法。
所以我理解的是,以前的匿名内部类,既可以满足只有一个待实现方法的情况,也可以满足多个待实现方法的情况;但是函数式的这种,它只能用于只有一个待实现方法的情况
所以,我觉得函数式编程只是匿名内部类的一种特殊情况而已,它只能满足匿名内部类能满足的众多情况中的其中一种,只是它的写法上形式上和之前的匿名内部类有所不同(仅此而已,它底层还是匿名内部类,并且规定你匿名内部类实现的这个接口里只能有一个方法),并且它在书写格式上进行了大大的简化,因为把它弄出来的主要目的就是为了简化书写。这是我对函数式编程和匿名内部类的一些理解,我认为这个很重要。
上述这段话,可以先作为一个了解,如果暂时不理解的话,问题也不大。
有疑问很正常,继续往下看,花几分钟看完文章后,保证给你整的明明白白的。
一、初识Lambda
1、基本语法
到目前为止,如果对Java里的函数式编程和Lambda表达式一点都没有了解的话,可以先看一下我另外一篇对函数式编程和Lambda进行简短介绍的文章:JDK8 Lambda表达式
对函数式编程和Lambda有了一些简单的了解后,可以发现下面的内容,是我们对Lambda最直观的认识:
( ) -> { }
上边是Lambda表达式最基本的语法:左边的括号里是参数,中间是一个横杠箭头 -> ,右边的花括号里是表达式或代码块;
举个例子,比如:
(String name)->{
return "姓名:" + name;
}
上边这种写法,大家应该不陌生吧,咱们大部分情况下都是直接把上边的这种Lambda表达式作为一个参数,传递到 某个需要这种函数式接口作为参数的方法里。
其实,咱们也可以把Lambda表达式 在等号左边用个函数式接口来接受一下它的,比如下边这种写法:上边的例子,如果左边接收的类型补全的话,是这样的:
Function<String,String> functiona = (String name)->{
return "姓名:" + name;
};
那左边接收Lambda表达式的这个到底是个啥东西呢?它其实就是个普普通通的接口,只不过这个接口里只有一个待实现的方法(仅此而已)。如果有不理解的,也没事,脑子里先有这么个概念就行,具体的内容,等会儿下边会慢慢讲到。
|
最新内容
相关内容
文本处理用c还是用python
文本处理用c还是用python,位置,培训,包装,对比,字符串,函数,文本,语言,字符,效率,文本处理python与c的对比:如下c++语言:C++语言实现C++中没有python使用matplotlib绘图怎么在线
python使用matplotlib绘图怎么在线上标注?,地方,培训,坐标轴,图像,范围,画图,示例,注释,文字描述,以上,python画图常用标注包含,坐标轴的值和python怎么使用文件夹下的脚本?
python怎么使用文件夹下的脚本?,工作,培训,文件夹,脚本,文件,所在,方法,示例,路径,以上,python中使用文件夹下脚本的方法:将当前的工作目录(即python如何调用另一个文件夹中的内
python如何调用另一个文件夹中的内容?,系统,培训,文件,模块,内容,路径,函数,所在,前缀,语句,python中调用另外一个文件夹中的内容:1、同一文件机器学习用java还是python?
机器学习用java还是python?,分析,环境,数据,培训,发展,机器,结果,控制台,生态环境,有用,机器学习用python更合适。机器学习不需要面向对象,不chr在python中怎么用?
chr在python中怎么用?,数字,培训,整数,字符,参数,示例,语法,范围,形式,以上,python中chr()用一个范围在range(256)内的(就是0~255)整数作参数,pdf如何用python读取?
pdf如何用python读取?,数据,培训,代码,文件,内容,共享资源,图像,命令,字体,以上,python中可以使用pdfminer库来读取PDF文件中的内容。安装命python map()函数怎么用?
python map()函数怎么用?,培训,函数,序列,列表,参数,元素,示例,字符串,语法,例子,pythonmap()会根据提供的函数对指定序列做映射。第一个参数python常用函数包有哪些?
python常用函数包有哪些?,项目,数据,标准,系统,基础,代码,地址,分析,检测,网站,一些python常用函数包:1、Urllib3Urllib3是一个Python的HTTP客怎样用python计算矩阵乘法?
怎样用python计算矩阵乘法?,位置,矩阵,培训,一致,乘法,数组,函数,示例,作用,标量,python中计算矩阵乘法的方法:1、使用np.multiply()函数计算python怎么筛选列表中大于0的数据?
python怎么筛选列表中大于0的数据?,数据,培训,函数,结果,以上,方法,更多,内容,列表,python筛选列表中大于0的数据的方法:1、使用匿名函数lambpython列表有哪些常用方法?
python列表有哪些常用方法?,位置,方法,培训,列表,语法,元素,示例,对象,以上,参数,列表是最常用的Python数据类型,它可以作为一个方括号内的逗