java lambda表达式详解_Lambda表达式详解

1 Lambda表达式是Java8中的新特性

Java8中引入Lambda表达式,使得java可以函数式编程,在并发性能上迈出了实质性的一步。

什么是函数式编程?函数式编程(英语:functional programming)或称函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。

ps:λ这个符号可以在搜狗输入法的符号中显示

而在面向对象编程中,面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程范型,同时也是一种程序开发的方法。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。

2 lambda表达式能干什么?

@FunctionalInterface

使用匿名内部类的一个问题是:当一个匿名内部类的实现非常简单,比如说接口只有一个抽象函数 ,那么匿名内部类的语法有点笨拙且不清晰。

使用下面这种方法的时候,不需要再使用new XXX(){}这种繁琐代码,不需要指出重写的方法的名字,也不需要给出重写方法的返回值类型,只要给出重写的方法括号以及括号里的形参列表即可

从上面介绍考科一看出,当使用Lambda表达式代替匿名内部类创建对象时,Lambda表达式的代码块将会代替实现抽象方法的方法体,Lambda表达式就相当于一个匿名方法

3 语法

(参数)->表达式 或 (参数)->{方法体;}

1.形参列表:

形参列表允许省略形参类型,若形参列表中只有一个参数,形参列表的圆括号也可以省略代码

2.箭头(->)

必须通过英文中划线号和大于符号组成

3.代码块:

如果代码块只包含一条语句,lambda表达式允许省略代码块的花括号,那么这条语句就不要用花括号表示语句结束

lambda代码块只有一条return语句,甚至可以省略return关键字

lambda表达式需要返回值,而它的代码块中仅有一条省略了return的语句,lambda表达式会自动返回这条语句的结果

lambda表达式的写法:

interface 

lambda表达式就可以把函数当做函数的参数,代码(函数)当做数据(形参),这种特性满足上述需求。当要实现只有一个抽象函数的接口时,使用lambda表达式能够更灵活。

interface 

4 Lambda表达式与函数式接口

在上面的案例中.方法的参数的数据类型或是获取一个对象,但是在实际调用中我们传入的是一个lambda表达式,可以发现程序可以

正常编译,运行,这说明Lambda表达式实际上将会被当成一个"类型"的对象

Lambda表达式的类型,也被称为"目标类型(target type)",Lambda表达式的目标类型必须是"函数式接口(functional interface)"

ps:Java8新引入的概念,函数接口(functional interface)。它的定义是:一个接口,如果只有一个显式声明的抽象方法,那么它就是一个函数接口。一般用@FunctionalInterface标注出来 (也可以不标记),函数式接口可以包含多个default或static方法,但是只能声明一个抽象方法

@FuctionalInterface主要作用就是检查当前接口是不是函数接口

若想使用lambdaname目标必须是一个函数接口

5 Lambda表达式引用全局和局部变量

@FunctionalInterface

6 方法引用与构造器引用

如果Lambda表达式的代码块只有一条代码,程序就可以省略Lambda表达式中的代码块的花括号

不仅如此,如果Lambda表达式的代码块只有一条代码,还可以在代码块中使用方法引用和构造器引用

方法引用和构造器引用都需要使用::两个英文冒号

6.1 引用类方法

在函数式接口中定义的抽象方法,而方法的实现是触发某个类.方法(调用类方法的形式)来完成时可以使用

@FunctionalInterface

6.2 引用特定对象的实例方法

在函数式接口中定义的抽象方法,而方法的实现是触发对象.方法(调用类方法的形式)来完成时可以使用

@FunctionalInterface

6.3 引用某类对象的实例方法

在函数式接口中定义的抽象方法,而方法的实现是触发是方法中第一个参数的对象.方法(调用类方法的形式)来完成时可以使用

@FunctionalInterface

6.4 引用构造方法

在函数式接口中定义的抽象方法,而方法的返回值是一个对应类的实例

@FunctionalInterface

7 Lambda表达式和匿名内部类的区别

1.匿名内部类可以为任意接口创建实例,不管接口包含多少个抽象方法,只要匿名内部类实现所有的抽象方法即可

但Lambda表达式只能为函数式接口创建实例(即只能有一个抽象方法)

2.匿名内部类可以为抽象类甚至是普通类创建实例

但Lambda表达式只能为函数式接口创建实例

3.匿名内部类实现的抽象方法的方法体允许调用接口中定义的默认(default)方法

但Lambda表达式的代码块不允许调用接口中的默认(default)方法

8 Lambda表达式应用

String

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对应的ctrl_取消单元格合并,对空白单元格填充数据,学会Ctrl+Enter五秒搞定

Excel统计数据过程中,相信大家最不想碰到的就是合并单元格,因为合并区域会对我们的数据统计造成各种麻烦。取消单元格合并后,除第一个单元格有内容外其他的单元格都成了空值。案例说明:如上图所示,我们需要将左边合并单…

pythoncsv文件处理_Python处理ExcelCSV文件

Python处理Excel&CSV文件 前言 在今年很早的时候,写过一篇用 Python 玩 Excel 的文章,可以回顾《Python操作 excel ?应该这么玩!》 当时介绍了用 Pandas 库玩股票,在 Excel 中画出一个图来。 现在有了前几天爬取的…

对比两个字符串相等_字符串匹配问题

0.题目在一个主串S{a, b, c, c, b, c, a, b, d}, 模式串T{a, b, d};请找出模式串在主串中第一次出现的位置提示: 不需要考虑字符串大小写问题,字符均为小写字母第一次在7的位置匹配上1.BF算法Brute-Force算法,简称为 BF算法,是一种简单朴素的…

eclipse 导入maven项目_解决Eclipse导入JAVA WEB项目错误的问题

蓝字关注远浩老师一、 本文问题在开发中不可避免地要涉及导入项目。Eclipse作为常用开发工具,导入JAVA WEB项目文件也很方便,但是我们经常发现导入完的项目有红色的叉来做错误提醒,甚至一些代码也出现错误提示的红线,如下图。 为了…

并发执行变成串行_大神浅谈数据库并发控制 锁和 MVCC

在学习几年编程之后,你会发现所有的问题都没有简单、快捷的解决方案,很多问题都需要权衡和妥协,而本文介绍的就是数据库在并发性能和可串行化之间做的权衡和妥协 - 并发控制机制。如果数据库中的所有事务都是串行执行的&#xff…

docker 部署_Nginx K8s + Docker 部署 ,虚拟机部署教程。

Nginx K8s Docker 部署 ,虚拟机部署教程!Linux 虚拟机 部署1、下载nginx:http://nginx.org/download/2、选择一个版本进行下载:wget http://nginx.org/download/nginx-1.14.0.tar.gz3、解压:tar -xvf nginx-1.14.0.tar.gz4、安装…

双机热备_双机热备软件哪个好?双机热备软件推荐

服务器维护和管理是企业健康稳定运营的一项重要工作,而双机热备可以提供服务器的高可用性。但是成熟好用的双机热备软件有哪些呢?下面就给大家推荐几款。微软MSCSMSCS(Microsoft Cluster Service)实际上是微软自带的,不…

Json和Xml

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第21章《Json和Xml》 二、Xml的介绍 Xml的含义&#xff1a; 可标记性语言&#xff0c;它将数据以一种特别简单文本格式储存。让所有人和几乎所有的计算机都能理解。 XML文件示例&#xff1a; <?xml version"1.…

ec20驱动_物联网基础:移远EC20固件升级

使用移远 QFlash_V4.14 工具升级移远 EC20 4G模块固件1 准备工作 1.1 EC20 USB驱动安装安装过程参考移远官方手册&#xff1a;《Quectel_LTE&5G_Windows_USB_Driver_安装指导_V1.0.pdf》&#xff0c;有详细USB安装指导&#xff0c;该手册及驱动文件可以去移远官方下载或后续…

的微波感知_上海交大彭志科教授团队研发:微波微动监测与智能感知技术

上海9月18日电(葛俊俊) 准确监测方舱医院大量感染患者的生命状况&#xff0c;精确“诊断”大桥工程结构是否存在安全隐患&#xff0c;随时随地获取独居老人在家的健康体征……上海交通大学彭志科教授团队研发的基于微波感知的微动监测与环境智能前瞻技术&#xff0c;像一种神奇…

win32键盘输入python_python-win32api键盘输入教程

importwin32guiimportwin32conimportwin32api#从顶层窗口向下搜索主窗口&#xff0c;无法搜索子窗口#FindWindow(lpClassNameNone, lpWindowNameNone) 窗口类名 窗口标题名 handle win32gui.FindWindow("Notepad", None)#获取窗口位置 left, top, right, bottom win…

小米笔记本引导修复_知识帖,笔记本电脑不能开机?你可以试试这些办法

大家经常遇到电脑开机不能进入系统的时候是不是特别难受,朝歌后面几篇文章会讲讲一些常见的电脑问题和解决办法啦 前面有一个系列的文章都是在组装电脑的问题,大家感兴趣的可以关注了去主页看看呀 在现在的日常生活里,笔记本电脑对于很多人来说会比台式机重要的多,因为笔记…

java同步锁synchronized_synchronized、锁、多线程同步的原理是咋样的?

先综述个结论&#xff1a;一般说的synchronized用来做多线程同步功能&#xff0c;其实synchronized只是提供多线程互斥&#xff0c;而对象的wait()和notify()方法才提供线程的同步功能。一般说synchronized是加锁&#xff0c;或者说是加对象锁&#xff0c;其实对象锁只是synchr…

ming window 交叉编译_如何在Linux for Windows上与MinGW交叉编译?

我正在尝试使用MinGW在Linux上编译Windows的Qt5应用程序.我正在使用Travis-CI来获得两个Windows可执行文件(win32,win64)的连续构建.我已经建立了一个构建矩阵,其中包含不同MinGW依赖项的定义.安装前部分定义了Qt,MinGW和gcc依赖项.在安装期间获取包.这是我的.travis.yml&#…

pacman 查询_掌握pacman包管理工具,玩转Arch Linux

前言在Arch/Manjaro系统中&#xff0c;包管理是使用pacman进行管理的。常用命令列出已经安装的软件包pacman -Q查看virtualbox包是否已经安装pacman -Q virtualbox查看已安装的包virtualbox的详细信息pacman -Qi virtualbox列出已安装包virtualbox的所有文件pacman -Ql virtual…

python追加_如何在Python中追加文件?

慕田峪7331174 您需要在附加模式下打开文件&#xff0c;方法是将“a”或“ab”设置为模式。见open&#xff08;&#xff09;。使用“a”模式打开时&#xff0c;写入位置将始终位于文件末尾&#xff08;附加&#xff09;。您可以使用“a ”打开以允许读取&#xff0c;向后搜索和…

系统相机裁剪比例_拍不出好照片,你缺的不是好手机而是相机设置的秘笈

玩转手机摄影&#xff0c;每天分享原创的手机摄影教程&#xff0c;手机相机功能、人像、风光、夜景、创意拍摄技巧&#xff0c;还有后期调色、修图等教程&#xff0c;欢迎感兴趣的朋友点击右上角&#xff0c;关注我们&#xff01;--------------------------------------------…

python给函数添加属性_如何在python中自动向类添加属性?

我有一个具有很多属性的类&#xff0c;这些属性在instanciating(init)时提供。看起来像这样&#xff0c;但还有大约30个attr&#xff1a;class SomeObject:def __init__(self,first,second):self.first firstself.second second工作正常&#xff0c;但很长很重复&#xff0c;…

任意点 曲线距离_中级数学11-曲线函数

距离、中点、圆抛物线椭圆双曲线非线性方程曲线本章介绍曲线及其性质。这里应用两圆锥体构成的推覆体与一个平面相交的截面&#xff0c;形成的曲线。从左到右截面&#xff1a;圆、抛物线、椭圆、双曲线距离、中点、圆应用勾股定理可求出三角形各边的长度。同样在直角坐标系中&a…

opencv 边缘平滑_基于OpenCV的车道检测实现(一)

无人驾驶的话题日趋起热&#xff0c;而车道线检测对于无人驾驶的路径规划来讲特别重要。要遵守交通规则&#xff0c;首先的要求便是对车道线检测&#xff0c;而且通过检测车道线可以进一步的检测地面指示标志、进行前碰撞预警策略设计等。早早就对OpenCV感兴趣&#xff0c;但迟…