Java Lambda 表达式

article/2025/10/4 0:58:51

目录

  • 一、说明
  • 二、理解
  • 三、演示
    • 1.常规方法实现
    • 2.静态内部类
    • 3.局部内部类
    • 4.匿名内部类
    • 5.Lambda表达式
    • 6.Lambda再简化

一、说明

Lambda表达式是什么

  • Lambda 表达式也称为闭包,是Java 8 发布的新特性
  • Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)

为什么要使用Lambda表达式

  • 避免匿名内部类定义过多,可以让代码简洁紧凑,留下核心的逻辑

二、理解

语法格式

(parameters) -> expression[表达式]
(parameters) -> statements[语句]
(parameters) ->{ statements; }

函数式接口

Functional lnterface(函数式接口)是指任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口,可以通过Lambda表达式创建该接口的对象

public interface Runnable {public abstract void run();
}

特征

  • 可省略类型声明:不需要声明形式参数类型
  • 可省略参数括号:一个参数无需定义括号,但多个参数需要定义括号
  • 可省略花括号:如果主体只包含了一个语句就不需要使用花括号
  • 可省略返回关键字:如果主体只包含了一个返回值语句则会自动返回

三、演示

1.常规方法实现

正常情况下的实现加法函数计算,需要定义接口并实现类,再调用方法,在此基础上不断简化,去深入理解Lambda 表达式是如果做到的
在这里插入图片描述

public class LambdaDemo {public static void main(String[] args) {//3.执行计算MathOperation addition = new Addition();addition.operation(1,2);}
}//1.定义一个函数式接口方法
interface MathOperation{void operation(int a, int b);
}//2.定义实现类
class Addition implements MathOperation{@Overridepublic void operation(int a, int b) {System.out.println(a + b);}
}

2.静态内部类

进一步改进使得代码更紧凑,实现静态内部类,也就是将实现类放入主类中,会提示我们需要定义静态类

在这里插入图片描述
在这里插入图片描述

public class LambdaDemo {//2.实现静态内部类static class Addition implements MathOperation{@Overridepublic void operation(int a, int b) {System.out.println(a + b);}}public static void main(String[] args) {//3.执行计算MathOperation addition = new Addition();addition.operation(1,2);}
}//1.定义一个函数式接口
interface MathOperation{void operation(int a, int b);
}

3.局部内部类

可是静态内部类还是太繁琐了,如果把它放进方法里面呢?由此引出局部内部类,即在一个方法中定义的内部类,这时就不用定义静态类了

在这里插入图片描述

public class LambdaDemo {public static void main(String[] args) {//2.实现局部内部类class Addition implements MathOperation{@Overridepublic void operation(int a, int b) {System.out.println(a + b);}}//3.执行计算MathOperation addition = new Addition();addition.operation(1,2);}
}//1.定义一个函数式接口
interface MathOperation{void operation(int a, int b);
}

4.匿名内部类

局部内部类还是感觉代码太多了,如果简化呢?比如把类名隐藏?匿名内部类就是没有名字的内部类,其必须实现接口或抽象父类的所有抽象方法

在这里插入图片描述

public class LambdaDemo {public static void main(String[] args) {//2.实现匿名内部类,实现接口,直接执行计算new MathOperation(){@Overridepublic void operation(int a, int b) {System.out.println(a + b);}}.operation(1, 2);}
}//1.定义一个函数式接口
interface MathOperation{void operation(int a, int b);
}

在这里插入图片描述

public class LambdaDemo {public static void main(String[] args) {//2.实现匿名内部类,实现接口MathOperation addition = new MathOperation() {@Overridepublic void operation(int a, int b) {System.out.println(a + b);}};//3.执行计算addition.operation(1,2);}
}//1.定义一个函数式接口
interface MathOperation{void operation(int a, int b);
}

5.Lambda表达式

都已经没有类名了,能否再简化呢?用Lambda试试,因为接口中只有一个方法,方法中只有一块语句,因此可以省略接口和方法,只留下语句实现

在这里插入图片描述

public class LambdaDemo {public static void main(String[] args) {//2.Lambda简化,只有一块语句,省略接口和方法,只留下语句实现MathOperation addition = (int a , int b) -> {System.out.println(a + b);};//3.执行计算addition.operation(1, 2);}
}//1.定义一个函数式接口
interface MathOperation{void operation(int a, int b);
}

6.Lambda再简化

Lambda 表达式还可以省略参数类型,因为一行语句,因此可以省略花括号

在这里插入图片描述

public class LambdaDemo {public static void main(String[] args) {//2.Lambda简化,省略参数类型,代码块只有一句,可以省略花括号MathOperation addition = (a , b) -> System.out.println(a + b);//3.执行计算addition.operation(1,2);}
}//1.定义一个函数式接口
interface MathOperation{void operation(int a, int b);
}

http://chatgpt.dhexx.cn/article/fdAqoOC1.shtml

相关文章

C++ Lambda表达式

在C11和更高版本中,Lambda表达式(通常称为Lambda)是一种在被调用的位置或作为参数传递给函数的位置定义匿名函数对象(闭包)的简便方法。Lambda通常用于封装传递给算法或异步函数的少量代码行。1 Lambda表达式是C11中一…

java Lambda表达式详解

文章目录 一、背景1.1语法1.2函数式接口 二、Lambda的基本使用2.1引子2.2常见的使用方式2.3语法小结 三、变量捕获3.1 匿名内部类3.2 匿名内部类的变量捕获3.3Lambda的变量捕获 四、Lambda在集合当中的使用4.1 Collection接口4.2 list接口4.3 Map接口 总结 提示:以下…

Lambda表达式详解

Lambda表达式 1. 为什么使用lambda表达式2. 入门案例3. lambda表达式组成4. lambda表达式使用4.1 语法格式一4.2 语法格式二4.3 语法格式三4.4 语法格式四4.5 语法格式五4.6 语法格式六 5. 总结 1. 为什么使用lambda表达式 lambda是一个匿名函数,我们可以吧lambda表…

Lambda 表达式

一.什么事Lambda表达式 Lambda 表达式是一种匿名函数,也可称为闭包,简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和名字。 它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使 Java 语言…

Lambda表达式超详细总结(简单易懂)

文章目录 1、什么是Lambda表达式2、为什么使用Lambda表达式3、函数式接口(lambda表达式的使用前提)4、推导Lambda表达式5、Lambda表达式语法 1、什么是Lambda表达式 Lambda表达式,也可称为闭包。其本质属于函数式编程的概念,是Ja…

Lambda表达式超详细总结

文章目录 1. 什么是Lambda表达式2. 为什么使用Lambda表达式3. Lambda表达式语法4. 函数式接口4.1 什么是函数式接口4.2 自定义函数式接口4.3 Java内置函数式接口 5. 方法引用6. 构造器引用7. 数组引用8. Lambda表达式的作用域8.1 访问局部变量8.2 访问局部引用,静态…

SQL语句学习之SQL基础的表创建以及添加数据

SQL语句学习之SQL基础的表创建以及添加数据 学习目标1: 一周内掌握SQL基础语句 tip:主要是在牛客网(牛客网)上进行练习,里面有在线编程,可以直接运行,而且有解题的思路,比较清晰,而…

Hive SQL之表与建表

Hive数据模型总览 用户通过数据库访问Hive后,首先选择哪个数据库,然后在库的下面选择的是一张张表,表是管理数据的的最基本的所在,在表中的一行行记录,在现实中就是一条条数据,里面有我们的字段字段类型和它…

SQLite 创建表SQL语句

SQLite 创建表 创表语法 CREATE TABLE [表名称](--主键列不可为空[列1] [类型] PRIMARY KEY NOT NULL,--列可为空[列2] [类型],--列不可为空[列3] [类型] NOT NULL );创表示例 CREATE TABLE User (Id INT PRIMARY KEY NOT NULL,Name Text,Sex INT NOT NULL )在线Sqlite查看器…

SQL创建表为啥不显示

这里新建表 左上角报存 保存完以后点击刷新就会出来刚创建的表格

SQL 创建表的备份

1. SELECT INTO 语句 SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。 SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档; SQL SELECT INTO 语法 您可以把所有的列插入新表: SELECT * INTO new_table_name…

SQL Server创建表

我们要怎么在数据库中创建表呢!首先,表在数据库和模式中唯一命名。每个表包含一个或多个列。 每列都有一个相关的数据类型,用于定义它可以存储的数据类型,例如:数字,字符串和日期。 要创建新表,…

SQL Server 创建表

我们在上一节中完成了数据库的创建,在本节,我们要往这个新的数据库中加入点数据,要想将数据添加到数据库,我们就必须在数据库中添加一个表,接下来来看看具体的操作。 我们的数据库是一个任务跟踪数据库,那…

ORACLE SQL 创建表

1.创建表: 1.1表名和列名: 一定要以字母开头 一定在 1-30 个字符之间 只能包含 A–Z, a–z, 0–9, _, $, 和 # 一定不能和用户定义的其他对象重名 一定不能是Oracle 的保留字 一定要有CREATE TABLE权限 而且需要一定的存储空间 还要指定的&…

利用SQL创建表结构

一、创建图书管理系统,其中涉及到的对象有(图书分类,图书,学生,借书记录) 1、列出关系模式 (1) 书本类别(种类编号,种类名称) (2) 学生(学生编号&#xff0…

SQL创建表

要创建新的表,就要使用create table语句。 1、第一,要指定数据库的名称,必须是数据库有的,如果没有指定,那就默认是当前数据库。(如图下所示是没有指定数据库的) 2、第二,指定表的模…

SQL表的创建

一,创建表 1.使用普通方法创建表 1,进入SQL进行连接 2,在左边会有一个对象资源管理器,右键数据库,在弹出的窗口中选择新建数据库 3,给这个包取个名字,在这个界面可以给这个表选择存储地方&…

SQL语句之表的创建和使用

表 一、表的创建(DDL)1.建表的语法格式创建一个学生表 2.mysql中的数据类型3.删除表 二、在表中插入数据insert(DML)1.insert2.insert插入日期3.date和datetime区别 三、修改(update)DML1.语法格式 四、删除数据(delete)DML1.语法…

SQL 创建数据库,创建表

1.SQL CREATE DATABASE 语法 CREATE DATABASE 库名;创建数据库后,您可以在数据库列表中检查它。 SHOW DATABASES;2.SQL CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表。表由行和列组成,每个表都必须有个表名。 SQL CREATE TABLE 语法 C…

Autojs-识别验证码-超级鹰打码(全网独一份,求个三连不过分吧)

Autojs-识别验证码-超级鹰打码 前言先看效果再放代码封装一下1.识别图片2.报错返分3.查询用户的题分信息4.主函数 超级鹰文档错误码验证码类型(截了几个常用的)1.英文数字2.中文3.纯英文4.纯数字 最后求个三连~ 前言 JavaScript语言的超级鹰打码应该是全…