Java学习笔记40——Lambda表达式
Lambda表达式
- Lambda表达式
- 函数式编程思想概述
- Lambda表达式的标准格式
- Lambda表达式练习
- 练习1
- 练习2
- 练习3
- Lambda表达式的省略模式
- Lambda表达式的注意事项
- Lambda表达式与接口的区别
Lambda表达式
函数式编程思想概述
面向对象思想强调“必须通过对象的形式做事”
在函数式思想中尽量忽略面向对象的复杂语法:“强调做什么,而不是什么形式做”
Lambda表达式的标准格式
- ()里面为空,可以看成是方法的形参为空
- -> 用箭头指向后面要做的事
- {} 包含一段代码,称为代码块,可以看成是方法体中的内容
三要素:形式参数、箭头、代码块
(形式参数)->{代码块}
Lambda表达式练习
Lambda表达式使用的前提条件
- 有一个接口
- 接口中有且仅有一个抽象方法
练习1
- 定义一个接口(Eatable),里面定义一个抽象方法: void eat()
- 定义一个测试类(EatableDemo),在测试类中提供两个方法
- 一个 方法是:useEatable(Eatable e)
- 一个方法是主方法,在主方法中调用useEatable方法
创建接口
public interface Eatable {void eat();
}
创建实现类
public class EatableImpl implements Eatable{@Overridepublic void eat(){System.out.println("CC吃我的屎!");}
}
创建测试类
public class EatableDemo {public static void main(String[] args){//实现类Eatable e=new EatableImpl();useEatable(e);//匿名内部类useEatable(new Eatable() {@Overridepublic void eat() {System.out.println("CC吃我的屁!");}});//Lambda表达式useEatable(()->{System.out.println("CC吃我的大便!");});}private static void useEatable(Eatable e){e.eat();}
}
练习2
- 定义一个接口(Flyable),里面定义一个抽象方法: void fly(String s)
- 定义一个测试类(FlyableDemo),在测试类中提供两个方法
- 一个是useFlyable(Flyable f)
- 一个是主方法调用useFlyable方法
定义接口
public interface Flyable {void fly(String s);
}
测试类
public class FlyableDemo {public static void main(String[] args){//匿名内部类useFlyable(new Flyable() {@Overridepublic void fly(String s) {System.out.println(s);System.out.println("把CC屁股打烂!");}});//LambdauseFlyable((String s)->{System.out.println(s);System.out.println("把CC活打死!");});}private static void useFlyable(Flyable f){f.fly("飞飞飞");}
}
练习3
- 定义一个Addable接口,里面定义一个抽象方法:int add(int x,int y)
- 定义一个AddableDemo测试类包含
- useAddable(Addable a)
- 主方法调用useAddable
创建接口
public interface Addable {int add(int x,int y);
}
测试类
public class AddableDemo {public static void main(String[] args) {useAddable((int x,int y)->{return x+y;});}private static void useAddable(Addable a){int res=a.add(10,20);System.out.println(res);}
}
Lambda表达式的省略模式
- 参数的类型可以省略,有多个不能只省略一个
- 如果参数有且仅有一个,小括号可以省略
- 如果代码块只有一行,可以省略大括号和分号(有return也需要省略)
public class LambdaDemo {public static void main(String[] args) {
// useAddable((int x,int y)->{
// return x+y;
// });//参数的类型可以省略,不能只省略一个useAddable((x, y)->{return x+y;});//如果参数有且仅有一个,小括号可以省略useFlyable(s->{System.out.println(s);System.out.println("把CC活打死!");});//如果代码块只有一行,可以省略大括号和分号(有return也需要省略)useFlyable(s-> System.out.println(s));}public static void useFlyable(Flyable f){f.fly("飞飞飞");}private static void useAddable(Addable a){int res=a.add(10,20);System.out.println(res);}
}
Lambda表达式的注意事项
- 必须要有接口,并且接口中有且只有一个抽象接口
- 必须有上下文环境,才能推导出Lambda接口
- 根据局部变量的赋值得知lambda对应的接口:Runnable r=()->System.out.println(“Lambda表达式”);
- 根据调用方法的参数得知lambda对应的接口:new Thread(()->System.out.println(“Lambda表达式”)).start();
Lambda表达式与接口的区别
所需类型不同
- 匿名内部类:可以是接口也可以是抽象类,还可以是具体类
- Lambda表达式:只能是接口
使用限制不同 - 如果接口中有且只有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
- 如果接口中多于一个抽象方法,只能用匿名内部类,不能用Lambda表达式
实现原理不同 - 匿名内部类编译后,产生一个单独的.class字节码文件
- Lambda编译之后没有单独的.class字节码文件。对用的字节码会在运行的时候动态生成
相关文章:
Java学习笔记40——Lambda表达式
Lambda表达式 Lambda表达式函数式编程思想概述Lambda表达式的标准格式Lambda表达式练习练习1练习2练习3 Lambda表达式的省略模式Lambda表达式的注意事项Lambda表达式与接口的区别 Lambda表达式 函数式编程思想概述 面向对象思想强调“必须通过对象的形式做事” 在函数式思想中…...
【考研数学】线性代数第五章 —— 特征值和特征向量(3,矩阵对角化理论)
文章目录 引言三、矩阵对角化理论3.1 一般矩阵的相似对角化3.2 实对称矩阵的相似对角化3.2.1 实对称矩阵相似对角化定理3.2.2 实对称矩阵相似对角化过程 写在最后 引言 承接前文,我们来看看矩阵的对角化理论。 我们前面提到对角化是在矩阵相似那里,若存…...
【计算机网络】IP数据报首部格式、最大传输单元MTU、最大分段大小MSS
创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 更多计算机网络知识专栏:计算机网络🔥 给大家跳段…...
shell脚本之文件读写
shell脚本之文件读写 1、读取文件内容并打印2、将内容写入文件3、追加内容到文件末尾4、读取文件内容到变量中5、逐行读取文件内容并处理6、逐行追加内容到文件末尾7、获取文件行数8、获取文件最后一个单词 Shell 脚本读写文件的方法有很多种,下面是一些常见的方法&…...
SAP 刷新Fiori Apps缓存的方法(解决修改CDS后Fiori无法重载新配置)
1. 问题 修改CDS Annotation后,基于Fiori Element发布的Fiori App无法应用新的界面 2. 解决办法 2319491 - How to clean up the cache after applying changes that affect SAP Fiori apps刷新Frontend: SE38: /UI5/APP_INDEX_CALCULATE…...
如何在 Excel 中计算日期之间的天数
计算两个日期之间的天数是 Excel中的常见操作。无论您是规划项目时间表、跟踪时间还是分析一段时间内的趋势,了解如何在 Excel 中查找日期之间的天数都可以提供强大的日期计算功能。 幸运的是,Excel 提供了多种简单的方法来获取两个日期之间的天数。继续…...
Java高级-注解
注解 1.介绍2.元注解3.注解的解析4.注解的应用场景 1.介绍 注解 Annotation 就是Java代码里的特殊标记,作用是让其他程序根据注解信息来决定什么是执行该程序注解:注解可以在类上、构造器上、方法上、成员变量上、参数上等位置 自定义注解 /*** 自定…...
wabp.m 代码注释(便于算法快速理解)
算法效果: 波峰和起点检测效果: function [r,pk] = wabp(Araw, Offset,Scale, Fs) % r = wabp(Araw,Offset,Scale, Fs); % Input: Araw (125Hz sampled) waveform in wfdb-MIT format, % Offset, Scale % Araw = 血压波形 % Offset=偏移(信号减去或者加上偏移恢复成…...
数据库数据恢复-SQL SERVER数据库文件损坏的故障表现数据恢复方案
SQL SERVER数据库故障类型: SQL SERVER数据库MDF(NDF)或LDF损坏。 SQL SERVER数据库故障原因: 1、数据库正在操作过程中,机器突然断电。 2、人为误操作。 SQL SERVER数据库MDF(NDF)或LDF损坏的…...
flink中cpu消耗的大户-序列化和反序列化
背景 故事的起源来源于这样一篇关于序列化/反序列化优化的文章https://www.ververica.com/blog/a-journey-to-beating-flinks-sql-performance,当把传输的对象从String变成byte[]数组后,QPS直接提升了50% flink的网络数据交换优化 在flink中对于每个算子之间的跨…...
使用 K 均值聚类进行颜色分割
介绍 颜色分割是计算机视觉中使用的一种技术,用于根据颜色识别和区分图像中的不同对象或区域。聚类算法可以自动将相似的颜色分组在一起,而不需要为每种颜色指定阈值。当处理具有大范围颜色的图像时,或者当事先不知道确切的阈值时,这非常有用。 在本教程中,我们将探讨如何…...
Redis 哈希表操作实战(全)
目录 HSET 添加 HSETNX 添加 HMSET 批量添加 HGET 获取元素 HGETALL 获取所有 HMGET 批量查询 HEXISTS 判断是否存在 HINCRBY 增加整数 HINCRBYFLOAT 添加浮点数 HLEN 查Field数量 HKEYS 查所有Field HVALS 查所有Field值 HSCAN 迭代 HDEL 删除Field HSET 添加 …...
element table合并行或列 span-method
首先来看下官网上如何写的 <template><div><el-table:data"tableData":span-method"objectSpanMethod"borderstyle"width: 100%; margin-top: 20px"><el-table-columnprop"id"label"ID"width"18…...
【操作系统笔记】内存分配
内存对齐 问题:为什么需要内存对齐呢? 主要原因是为了兼容,为了让程序可以运行在不同的处理器中,有很多处理器在访问内存的时候,只能从特定的内存地址读取数据。换个说法就是处理器每次只能从内存取出特定个数字节的数…...
Web 整合
HTML span 行内元素 p 块级元素 br/ 强制换行 i em倾斜 b strong 加粗 u 下划线 mark 高亮 超链接 a :a href"链接地址" target"_blank" alt"可替文本" title"文字提示" tartget:_self 自己界面打开 _…...
hasOwnProperty 方法解析
一、含义: hasOwnProperty 是 JavaScript 中的一个内置方法,用于检查对象是否具有指定名称的属性。 具体来说,hasOwnProperty 方法用于判断一个对象是否拥有某个指定的属性,而不是继承自原型链的属性。它是一个布尔值方法&#…...
使用 nohup 运行 Python 脚本
简介:在数据科学、Web 开发或者其他需要长时间运行的任务中,我们经常需要让 Python 脚本在后台运行。尤其是在远程服务器上,可能因为网络不稳定或需要执行多个任务,我们不希望 Python 脚本因为终端关闭而被终止。这时,…...
Django:五、登录界面实现动态图片验证码
一、下载包 pip install pillow 二、代码 这是一个函数,无输入,返回两个值。一个值是图片,一个值是图片中的数字及字母。 需要注意:font_fileMonaco.ttf 是一个验证码字体文件,如有需要,可三连私信。 …...
GPT,GPT-2,GPT-3,InstructGPT的进化之路
ChatGPT 火遍圈内外,突然之间,好多人开始想要了解 NLP 这个领域,想知道 ChatGPT 到底是个什么?作为在这个行业奋斗5年的从业者,真的很开心让人们知道有一群人在干着这么样的一件事情。这也是我结合各位大佬的文章&…...
firefox_dev_linux下载安装配置(部分系统自带包请看结尾)
download 从 Firefox 的官方网站下载 Firefox Developer Edition 的 tar 文件 firefox_dev_linux_download # 终端快速下载 wget https://download.mozilla.org/?productfirefox-devedition-latest-ssl&oslinux64&langen-US彻底删除自带原版 # apt系 sudo apt --pu…...
别再只会抓HTTP了!手把手教你配置Fiddler抓取手机App的HTTPS请求(含证书安装避坑)
移动端HTTPS抓包实战:Fiddler配置与证书避坑指南 每次看到App里那些神秘的网络请求,你是不是也好奇它们到底在传输什么数据?作为开发者或测试人员,能够抓取和分析这些请求是基本功。但面对HTTPS加密流量,很多新手往往束…...
英飞凌AURIX TC3XX GPIO驱动配置与LED呼吸灯实现
1. 认识AURIX TC3XX的GPIO模块 第一次接触英飞凌AURIX TC3XX系列MCU时,我被它强大的GPIO功能惊艳到了。这不仅仅是一个简单的数字输入输出接口,而是集成了多种高级特性的硬件模块。在实际汽车电子项目中,比如氛围灯控制、状态指示灯等场景&a…...
解锁自定义键盘体验:用Vial-QMK打造个性化配置指南
解锁自定义键盘体验:用Vial-QMK打造个性化配置指南 【免费下载链接】vial-qmk QMK fork with Vial-specific features. 项目地址: https://gitcode.com/gh_mirrors/vi/vial-qmk 核心价值:为什么选择Vial-QMK定制键盘? 在机械键盘的世…...
人工智能毕业设计2026方向集合
0 选题推荐 - 人工智能篇 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际…...
开源动作捕捉新纪元:FreeMoCap低成本解决方案全解析
开源动作捕捉新纪元:FreeMoCap低成本解决方案全解析 【免费下载链接】freemocap Free Motion Capture for Everyone 💀✨ 项目地址: https://gitcode.com/GitHub_Trending/fr/freemocap 问题:动作捕捉技术的高门槛困境 在数字内容创作…...
GitHub访问加速终极指南:5分钟告别龟速访问的完整解决方案
GitHub访问加速终极指南:5分钟告别龟速访问的完整解决方案 【免费下载链接】fetch-github-hosts 🌏 同步github的hosts工具,支持多平台的图形化和命令行,内置客户端和服务端两种模式~ | Synchronize GitHub hosts tool, support m…...
注册表CLSID权限控制技术:通过权限管理实现IDM永久试用
注册表CLSID权限控制技术:通过权限管理实现IDM永久试用 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 问题引入:IDM试用期管理的技术困境…...
如何通过LibreHardwareMonitor实现高效全面的硬件监控:实用指南
如何通过LibreHardwareMonitor实现高效全面的硬件监控:实用指南 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor, home of the fork of Open Hardware Monitor 项目地址: https://gitcode.com/GitHub_Trending/li/LibreHardwareMonitor Libre…...
零基础玩转VideoFusion:高效视频批量处理全攻略
零基础玩转VideoFusion:高效视频批量处理全攻略 【免费下载链接】VideoFusion 一站式短视频拼接软件 无依赖,点击即用,自动去黑边,自动帧同步,自动调整分辨率,批量变更视频为横屏/竖屏 项目地址: https://gitcode.com/gh_mirrors/vi/VideoFusion 在数字内容创…...
避免Java Stream重复消费:高效过滤Map的策略
本文旨在解决Java Stream在多过滤场景中常见的IllegalStatexception,即流被重复消耗的问题。我们将深入讨论Java Stream的单次使用特性,通过将外部过滤条件转换为集合,优化Map的过滤操作,提供高效、符合最佳实践的解决方案&#x…...
