Java【lambda表达式】语法及使用方式介绍
相关文章目录
第一篇: Java【EE初阶】进程相关知识 + 进程管理 + 内存管理
文章目录
- 相关文章目录
- 前言
- 一、lambda表达式 是什么?
- 1, lambda表达式 的背景
- 2, 什么是 函数式接口
- 3, lambda表达式 的语法
- 二、lambda表达式 的使用方式
- 1, 无参无返回值
- 2, 有一个参, 无返回值
- 3, 有多个参, 无返回值
- 4, 无参, 有返回值
- 5,有一个参,有返回值
- 6,有多个参,有返回值
- 7, 说明
- 三、 变量捕获
- 1, 匿名内部类 的变量捕获
- 2, lambda表达式 的变量捕获
- 四、为什么要有 lambda表达式
- 总结
前言
由于正在更新 Java【EE初阶】部分中多线程相关的文章,lambda表达式 是多线程编程中很常用的语法功能,本篇将分享 lambda表达式 相关的内容, 主要介绍 lambda表达式 的使用方式 以及在集合中的一些应用
如果看到这篇文章的读者们正处于 Java 基础语法阶段,只要有【类和对象、接口】部分的基础就可以无压力学会 lambda表达式 的基本操作
提示:是正在努力进步的小菜鸟一只,如有大佬发现文章欠佳之处欢迎评论区指点~ 废话不多说,直接发车~
一、lambda表达式 是什么?
1, lambda表达式 的背景
Lambda表达式 是 JavaSE8 中一个重要的新特性。lambda表达式 允许你通过表达式来代替功能接口(函数式接口)。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)
Lambda 表达式(Lambda expression),基于数学中的λ演算得名,也可称为闭包(Closure)
🚗🚗🚗
要学习 lambda表达式,要先了解一下什么是函数式接口
2, 什么是 函数式接口
📌函数式接口 : 一个接口中有且仅有一个抽象方法(不能存在方法体)
👉例如 多线程编程中提到的 Runnable接口 的源码 :
这就是一个函数是接口, 可以看到, 接口中只有一个抽象方法, 并且还有一个注解 : @FunctionalInterface
这个注解负责说明 : 这是一个函数式接口, 并且负责检查 : 如果这个接口中还有其他方法, 就会编译不通过
JDK1.8 新增规定: 可以额外定义 default 方法(但是必须写出方法体)
👉我们自己写一个函数式接口试试 :
👉如果写了两个抽象方法, @FunctionalInterface 这个注解就会帮我们检查出来并报错
3, lambda表达式 的语法
📌基本语法: (parameters) -> { statements ; } 或者写成 : (parameters) -> expression
一个 lambda表达式 由三部分组成:
1️⃣paramaters :类似方法中的形参列表,这里的参数是函数式接口里的参数, 数据类型可以声明, 也可以不声明
当只有一个参数时, 可以省略小括号
2️⃣-> :可理解为 “被用于” 的意思
3️⃣方法体 :代码块(一行或多行), 是函数式接口里方法的实现 , 可以有返回值也可以没有, 等同于方法的方法体
当只有一句代码块时, 可以省略大括号和分号
🚗🚗🚗
以下仅展示语法使用和效果, 并不是完整的使用方式,具体使用下面会演示
// 1. 无参, 返回值为 2() -> {2;}// 2. 有一个参数x(省略类型), 返回参数x的二倍x -> {2 * x;}// 3. 有两个参数x, y(省略类型), 返回x+y的和(x, y) -> {x + y;}// 4. 有两个参数x, y, 返回x+y的积(int x, int y) -> {x * y;}// 5. 有一个参数s, 类型为String, 执行打印操作, 无返回值(String s) -> {System.out.print(s);}
二、lambda表达式 的使用方式
举 6 个例子, 能够覆盖所有的使用场景 :
1️⃣无参, 无返回值
2️⃣有一个参, 无返回值
3️⃣有多个参, 无返回值
4️⃣无参, 有返回值
5️⃣有一个参, 有返回值
6️⃣有多个参, 有返回值
所以接下来会定义 6 种函数式接口
复习知识点 : 要调用接口里的方法, 就需要有一个类实现这个接口, 在这个类中重写接口中的抽象方法, 然后实例化这个类, 才能调用
1, 无参无返回值
📌我们先展示最原始的写法:
1️⃣先定义出 NoParameterNoReturn 接口
2️⃣定义一个类 A , 实现 NoParameterNoReturn 接口, 并重写其中的 test 方法
3️⃣定义一个对象 “noParameterNoReturn”, 实例化类A
4️⃣调用对象中的 test 方法
控制台打印:
无参无返回值
📌然后来看匿名内部类的写法 :
实例化了一个不知道叫什么名字的类, 只知道这个类实现了 NoParameterNoReturn 接口, 并重写了其中的抽象方法
📌最后来看使用 lambda表达式 的写法 :
以下示例只展示 匿名内部类 及 lambda表达式 的写法
2, 有一个参, 无返回值
📌匿名内部类 :
控制台打印:
20: 有一个参, 无返回值
📌lambda表达式 :
3, 有多个参, 无返回值
📌 匿名内部类 :
控制台打印:
30: 有多个参, 无返回值
📌lambda表达式 :
4, 无参, 有返回值
📌匿名内部类 :
控制台打印 :
无参, 有返回值
100
📌lambda表达式 :
5,有一个参,有返回值
📌匿名内部类 :
控制台打印:
20: 有一个参, 有返回值
20
📌lambda表达式 :
6,有多个参,有返回值
📌 匿名内部类 :
控制台打印:
30: 有两个参, 有返回值
30
📌lambda表达式 :
7, 说明
以有多个参, 有返回值的接口为例 : 使用函数式接口时 , idea 可以检查并提示你的代码编写方式
📌匿名内部类写法 :
📌lambda表达式写法 :
🚦🚦🚦
不知道读者是否发现了, 匿名内部类方式实现函数式接口时, 实例化对象时, new关键字及后面的接口名是灰色的
原因是👉idea更推荐你使用 lambda表达式 的写法
如图:
🚦🚦🚦
现在大概可以理解了: Lambda表达式 就是匿名内部类的简化,无非就是创建了一个类,实现了接口,重写了接口的方法
🚗🚗🚗
匿名内部类 和 lambda表达式 使用时, 有一个需要注意的地方 : 变量捕获
三、 变量捕获
1, 匿名内部类 的变量捕获
以无参无返回值的接口为例 :
📌在调用接口中的方法之前, 定义了两个变量 a , b 和一个常量 A , 尝试在方法中捕获 a , b 和 A
控制台打印 ;
a 的值是: 10
b 的值是: 20
A 的值是: 30
📌A是常量, 不能被修改
, 我们只讨论变量 a , b , 如果更改变量 a, b 的值, 就无法捕捉这两个变量, 直接编译报错, 如图 :
2, lambda表达式 的变量捕获
📌和匿名内部类一致, 只是写法不同, 如果是没有修改过的变量, 或者常量是可以捕获的
控制台打印 ;
a 的值是: 10
b 的值是: 20
A 的值是: 30
📌如果修改了变量, 则不能捕获, 直接编译不通过
四、为什么要有 lambda表达式
各位读者应该可以很直观的感受到 lambda表达式 的优点:代码层次上来说,非常的精简,不止如此,它还有很多优点:
1️⃣代码简洁,如果熟悉函数式接口,将会提高开发效率
2️⃣在多线程编程中方便进行并行运算
3️⃣能够改善集合中的部分操作(集合中提供了很多函数式接口)
这些优点就说明了为什么要有 lambda 表达式,但它也有一些缺点
1️⃣代码可读性下降
2️⃣不容易进行代码调试
对于简单的 lambda 表达式使用起来还是很方便的, 对于可读性和代码调试的打击也不会太大, 但是如果使用复杂的lambda表达式进行编程, 上述两条缺点就会放大, 并且需要程序员对于函数式接口非常的熟悉
总结
以上就是本篇的全部内容啦,主要介绍了:
1,lambda表达式 的语法和使用方法
2,lambda表达式 和 匿名内部类 中的变量捕获
3,lambda表达式 的优缺点
如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦😋😋😋~
上山总比下山辛苦
下篇文章见
相关文章:
Java【lambda表达式】语法及使用方式介绍
相关文章目录 第一篇: Java【EE初阶】进程相关知识 进程管理 内存管理 文章目录相关文章目录前言一、lambda表达式 是什么?1, lambda表达式 的背景2, 什么是 函数式接口3, lambda表达式 的语法二、lambda表达式 的使用方式1, 无参无返回值2, 有一个参…...
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)
目录 写在前面: 题目:94. 递归实现排列型枚举 - AcWing题库 读题: 输入格式: 输出格式: 数据范围: 输入样例: 输出样例: 解题思路: 代码: AC &…...
‘conda‘不是内部或外部命令,也不是可运行的程序或批处理文件。
Anaconda环境搭建常见问题 conda不是内部或外部命令,也不是可运行的程序或批处理文件。 解决方案:配置环境变量 1.找到Anaconda Nvaigator单机右键 2.更多 3.打开文件所在位置 4.继续Anaconda Nvaigator单机右键,更多,选择文件…...
HTTP 3.0来了,UDP取代TCP成为基础协议,TCP究竟输在哪里?
TCP 是 Internet 上使用和部署最广泛的协议之一,多年来一直被视为网络基石,随着HTTP/3正式被标准化,QUIC协议成功“上位”,UDP“取代”TCP成为基础协议,TCP究竟“输”在哪里? HTTP/3 采用了谷歌多年探索的基…...
《JavaCV从入门到实战教程合集》介绍和目录
前言 《JavaCV从入门到实战教程合集》是2016年《JavaCV开发实战教程》和2018年《JavaCV入门教程》2022年《JavaCV音视频实战宝典》三合一汇总合集,完整包含JavaCV入门教程》、《JavaCV开发实战教程》系列和《JavaCV音视频实战宝典》系列所有付费内容。 《JavaCV入…...
Form Generator扩展 文本 组件
一、form-generator是什么?✨ ⭐️ 🌟 form-generator的作者是这样介绍的:Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。 但目前它提供的组件并不能满足我们在项目中的…...
【C/C++】必知必会知识点大总结
✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:C/C知识点 📣专栏定位:整理一下 C 相关的知识点,供大家学习参考~ ❤️如果有收获的话,欢迎点赞👍…...
【JavaScript 逆向】百度旋转验证码逆向分析
声明本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除!案例目标爱企查百度安全验证百度搜索:aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS9zdGF0aWMvY2FwdGNoYS8以上均做了脱敏处理,B…...
PCL 点云投影到直线(C++详细过程版)
目录 一、算法原理二、代码实现三、结果展示1、原始点云2、投影结果一、算法原理 直线方程有三种表示法:一般式、点向式、参数式。PCL中统一采用的是点向式,直线的点向式方程为: x − x 0 m = y −...
中缀表达式转后缀表示式,及后缀表达式的运算规则
后缀表达式又称为逆波兰表达式 一,中缀表达式如何转后缀表达式 假定给出以下中缀表达式 132*2-1; 要将该表达式转为后缀表达式,我们要按照一定的规则去走,并且用到栈。 先来看规则中缀转后缀的规则: 前提&#x…...
【C++】STL简介
文章目录什么是STLSTL版本 原始版本(HP版本) P.J.版本 RW版本 SGI版本STL六大组件 容器 算法 仿函数 空间配置器 迭代器 配接器STL缺陷什么是STL STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不…...
(小甲鱼python)文件永久存储(上)总结 python文件永久存储(创建打开文件、文件对象的各种方法及含义)
一、文件永久存储 如何将数据永久的存放在硬盘上,具体如下。 1.打开文件 定义:往大了讲计算机系统中由操作系统管理的具有名称的存储区域,往小了讲是生活中的PPT、Excel、word三剑客、视频文件、音频文件等。 创建打开文件: open…...
甲酸溶液除钠离子,丙酸溶液除钾离子,医药液体除钾
水是医药行业中用量大、使用 泛的一种原料,它在生产过程中和药剂药品的制备中发挥着极其重要的作用。制药用水的原水通常为自来水或深井水,原水不能直接用作制剂用水或实验用水。因为原水中含有各类盐类和化合物,溶有CO2,还存在大…...
操作系统(2.2)--进程的描述与控制
目录 二、进程的描述 1.进程的定义和特征 1.1进程的定义 1.2进程的特征 2.进程的基本状态及转换 2.1进程的三种基本状态 2.2 三种基本状态的转换 2.3创建状态和中止状态 3.挂起操作和进程状态的转换 3.1 挂起状态的引入 3.2 引入挂起操作后三个进程状态的转换 …...
Python连接es笔记四之创建和删除操作
这一篇笔记介绍一下索引和数据的创建和删除。 其实对于索引来说,如果可以接触到 kibana 的话,可以很方便的在界面进行操作,这里简单介绍一下如何使用代码来操作索引的创建和删除。 索引的创建和删除操作 使用的还是 es 的连接:…...
字符串填充到指定长度
一、需求 在传输一个文件的时候,传输的是二进制数据,整个数据文件的结构为: 文件名称 文件本身 其中文件名称固定占30个byte,存在的情况就是,有的文件名比较长,有的文件名比较短,所有要补足30…...
macOS虚拟机安装全过程(VMware)
作为一名忠实果粉,我最大的愿望就是能够拥有一台Macbook,体验macOS,但是作为学生党,这价钱,贵到离谱啊~~~ 不过,VMware这个神器,可以解决一切问题:既然macOS可以在Macbook上运行&…...
第十三届蓝桥杯A组:选数异或——三种解法(线段树、DP、ST表)
[蓝桥杯 2022 省 A] 选数异或 题目描述 给定一个长度为 nnn 的数列 A1,A2,⋯,AnA_{1}, A_{2}, \cdots, A_{n}A1,A2,⋯,An 和一个非负整数 xxx, 给定 mmm 次查询, 每次询问能否从某个区间 [l,r][l, r][l,r] 中选择两个数使得他们的异或等于 xxx 。 输入格式 输入的第一…...
【CTF】CTF竞赛介绍以及刷题网址
CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今&…...
Springboot怎么优雅实现大文件的上传
前言在软件工程里,在处理“大”的时候一直是一个难点和难点,如并发大、数据量大、文件大,对硬件进行升级可以解决一些问题,但这并不最聪明的办法,而对于老板来说,这也不是成本最小的办法。作为开发人员来说…...
2月编程语言排行榜新鲜出炉,谁又摘得桂冠?
近日,TIOBE公布了2023年2月编程语言排行榜,本月各个语言表现如何?谁又摘得桂冠?一起来看看吧! TIOBE 2月Top15编程语言: 详细榜单查看TIOBE官网 https://www.tiobe.com/tiobe-index/ 关注IT行业的小伙伴…...
机器学习中的数学原理——模型评估与交叉验证
惭愧惭愧!机器学习中的数学原理这个专栏已经很久没有更新了!前段时间一直在学习深度学习,paddlepaddle,刷题专栏跟新了,这个专栏就被打入冷宫了。这个专栏名为白话机器学习中数学学习笔记,主要是用来分享一…...
JAVA开发(JSP的9大内置对象和4大作用域)
背景: 在springboot横行的javaweb开发中,现在的后端开发工程师基本不需要写前端JSP页面。但是作为web开发工程师,不懂JSP的原理和作用,几乎是不行的。 JSP技术介绍: JSP(全称Java Server Pagesÿ…...
(4)EKF失控保护
文章目录 前言 4.1 什么时候会触发? 4.2 当失控保护触发时,会发生什么?...
数论----质数的求解(C/C++)
CSDN的uu,你们好呀,今天我们要学习的内容是数论哦!这也是算法题中的一类题目吧。记好安全带,准备发车咯!🚀学习数论的意义📢算法导论说:“数论曾经被视为一种虽然优美但却没什么用处…...
【电赛MSP430系列】GPIO、LED、按键、时钟、中断、串口、定时器、PWM、ADC
文章目录MSP430一、GPIO二、点亮LED三、按键控制LED四、更改主时钟五、串口通信六、串口中断七、外部中断八、定时器九、定时器中断十、PWM十一、ADCMSP430 MSP430 是德州仪器(TI)一款性能卓越的超低功耗 16 位单片机,自问世以来,…...
【Linux】进程理解与学习(Ⅱ)
环境:centos7.6,腾讯云服务器Linux文章都放在了专栏:【Linux】欢迎支持订阅🌹相关文章推荐:【Linux】冯.诺依曼体系结构与操作系统【Linux】进程理解与学习(Ⅰ)浅谈Linux下的shell--BASH前言章节…...
vscode 爽到起飞的快捷键
这里写目录标题1. 窗口操作2. 代码编辑3. 批量操作4. 错误处理1. 窗口操作 文件之间切换: CtrlTab 切出一个新的编辑器窗口(最多3个): Ctrl\ 切换左中右3个编辑器窗口的快捷键: Ctrl1 Ctrl2 Ctrl3 2. 代码编辑 代码格式化: ShiftAltF 向上或向下移动一行: Alt…...
vs +qt 打包.cpp和.h为DLL文件
文章目录一 编译成库1 创建一个Qt library 项目2,将已有的文件拷贝到项目目录下3 在项目中添加现有项4,拷贝头文件到需要暴露给外面使用的类的头文件中5 拷贝xxx_EXPORT的宏到需要被暴露的类的名前面6 然后点击编译 就完成了。得到的dll文件在debug里面二…...
echarts有滑块
vue下使用echarts折线图及其横坐标拖拽功能 drawLine() {let that this,lineDate [],dispatchCount [],finishCount [],newCount [];let param {// 参数};axios.post(url, param).then(function(response) {let rs response.data.data;if (rs ! undefined && rs…...
温州网站制作案例/成都关键词快速排名
EJ Technologies JProfiler(Java剖析工具)r是一个功能强大的工具,您可以使用EJ Technologies JProfiler以动态的方式分析基于Java的应用程序,并使您能够分析它们,从而优化性能。基本简介JProfiler是一个全功能的Java剖析工具(profiler)&#…...
网站百度收录秒收方法/手机免费建网站
看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及颜色。 如果你将宽度调的足够…...
详述电子商务网站的建设/怎么在百度上做广告推广
【例9-23】最长公共子序列【问题描述】w一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X1,x2,…,xm>,则另一序列Z=1,z2,…,zk>是X的子序列是指存在一个严格递增的下…...
建设网站的一般步骤/石家庄网站seo外包
去官网 xshell:https://www.netsarang.com/download/down_form.html?code522 xftp:https://www.netsarang.com/download/down_form.html?code523 选择Evaluation user / Home & School user 填入自己的邮箱,然后会收到一封邮件…...
免费自己做网站手机软件/脑白金网络营销
硬盘安装。无需光盘、U盘;Win8.1为主,Ubuntu14.04为辅,可将Windows或Ubuntu设置为开机默认启动项。在Ubuntu下可查看、操作Windows系统下的文件;适用于安装和14.04版本号相近的Ubuntu系统。假设以上所述正是你所须要的,…...
wordpress在线主题导入/中国搜索引擎市场份额
科学(四年级下册)作业.doc科学(四年级下册)作业(江村小学 叶清峰老师设计)本文档由【中文word文档库】提供,转载分发敬请保留本信息;中文word文档库免费提供海量范文、教育、学习、政策、报告和经济类word文档。第一单元 电第一课 电和我们的生活一、判断…...