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…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
