当前位置: 首页 > news >正文

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

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多计算机网络知识专栏&#xff1a;计算机网络&#x1f525; 给大家跳段…...

shell脚本之文件读写

shell脚本之文件读写 1、读取文件内容并打印2、将内容写入文件3、追加内容到文件末尾4、读取文件内容到变量中5、逐行读取文件内容并处理6、逐行追加内容到文件末尾7、获取文件行数8、获取文件最后一个单词 Shell 脚本读写文件的方法有很多种&#xff0c;下面是一些常见的方法&…...

SAP 刷新Fiori Apps缓存的方法(解决修改CDS后Fiori无法重载新配置)

1. 问题 修改CDS Annotation后&#xff0c;基于Fiori Element发布的Fiori App无法应用新的界面 2. 解决办法 2319491 - How to clean up the cache after applying changes that affect SAP Fiori apps刷新Frontend&#xff1a; SE38&#xff1a; /UI5/APP_INDEX_CALCULATE…...

如何在 Excel 中计算日期之间的天数

计算两个日期之间的天数是 Excel中的常见操作。无论您是规划项目时间表、跟踪时间还是分析一段时间内的趋势&#xff0c;了解如何在 Excel 中查找日期之间的天数都可以提供强大的日期计算功能。 幸运的是&#xff0c;Excel 提供了多种简单的方法来获取两个日期之间的天数。继续…...

Java高级-注解

注解 1.介绍2.元注解3.注解的解析4.注解的应用场景 1.介绍 注解 Annotation 就是Java代码里的特殊标记&#xff0c;作用是让其他程序根据注解信息来决定什么是执行该程序注解&#xff1a;注解可以在类上、构造器上、方法上、成员变量上、参数上等位置 自定义注解 /*** 自定…...

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数据库故障类型&#xff1a; SQL SERVER数据库MDF&#xff08;NDF&#xff09;或LDF损坏。 SQL SERVER数据库故障原因&#xff1a; 1、数据库正在操作过程中&#xff0c;机器突然断电。 2、人为误操作。 SQL SERVER数据库MDF&#xff08;NDF&#xff09;或LDF损坏的…...

flink中cpu消耗的大户-序列化和反序列化

背景 故事的起源来源于这样一篇关于序列化/反序列化优化的文章https://www.ververica.com/blog/a-journey-to-beating-flinks-sql-performance,当把传输的对象从String变成byte[]数组后&#xff0c;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…...

【操作系统笔记】内存分配

内存对齐 问题&#xff1a;为什么需要内存对齐呢&#xff1f; 主要原因是为了兼容&#xff0c;为了让程序可以运行在不同的处理器中&#xff0c;有很多处理器在访问内存的时候&#xff0c;只能从特定的内存地址读取数据。换个说法就是处理器每次只能从内存取出特定个数字节的数…...

Web 整合

HTML span 行内元素 p 块级元素 br/ 强制换行 i em倾斜 b strong 加粗 u 下划线 mark 高亮 超链接 a &#xff1a;a href"链接地址" target"_blank" alt"可替文本" title"文字提示" tartget&#xff1a;_self 自己界面打开 _…...

hasOwnProperty 方法解析

一、含义&#xff1a; hasOwnProperty 是 JavaScript 中的一个内置方法&#xff0c;用于检查对象是否具有指定名称的属性。 具体来说&#xff0c;hasOwnProperty 方法用于判断一个对象是否拥有某个指定的属性&#xff0c;而不是继承自原型链的属性。它是一个布尔值方法&#…...

使用 nohup 运行 Python 脚本

简介&#xff1a;在数据科学、Web 开发或者其他需要长时间运行的任务中&#xff0c;我们经常需要让 Python 脚本在后台运行。尤其是在远程服务器上&#xff0c;可能因为网络不稳定或需要执行多个任务&#xff0c;我们不希望 Python 脚本因为终端关闭而被终止。这时&#xff0c;…...

Django:五、登录界面实现动态图片验证码

一、下载包 pip install pillow 二、代码 这是一个函数&#xff0c;无输入&#xff0c;返回两个值。一个值是图片&#xff0c;一个值是图片中的数字及字母。 需要注意&#xff1a;font_fileMonaco.ttf 是一个验证码字体文件&#xff0c;如有需要&#xff0c;可三连私信。 …...

GPT,GPT-2,GPT-3,InstructGPT的进化之路

ChatGPT 火遍圈内外&#xff0c;突然之间&#xff0c;好多人开始想要了解 NLP 这个领域&#xff0c;想知道 ChatGPT 到底是个什么&#xff1f;作为在这个行业奋斗5年的从业者&#xff0c;真的很开心让人们知道有一群人在干着这么样的一件事情。这也是我结合各位大佬的文章&…...

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…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...