【Java】:lambda 表达式

![](https://pic.it1024doc.com/csdn/202412/71e03759762be38e9b71a6acff995d34.png)

### **1. 引言 🚀**

🔥 **Lambda** 表达式是Java在JDK8中引入的一项创新特性,它极大地简化了Java代码的编写,尤其是在处理集合遍历和操作时。Lambda表达式允许我们将函数作为参数传递,使得代码结构更加优雅和高效。JDK提供了丰富的内置函数式接口,进一步增强了Lambda表达式的实用性。

  * **Lambda 表达式** 可以视为一种匿名函数,其名称来源于数学中的λ演算,有时也被称作闭包(Closure)。
  * **Lambda** 表达式的用例:简化接口的实现。

### **2. 基础应用 🖊**

#### 🥑 1. 语法结构 

🎈 Lambda表达式的构成包括**参数列表(parameters)、箭头符号(->)和方法体(expression 或 statements)**。

  * **参数列表**:类似于方法中的参数列表,这里的参数属于函数式接口中的参数。参数类型可以明确声明,也可以由JVM隐式推断。若只有一个参数且类型可推断,则可以省略圆括号。
  * **箭头符号**:表示“用于”的意思。
  * **方法体**:可以是单个表达式或代码块,对应函数式接口中方法的实现。

    * 代码块可以返回值或不返回,类似于方法的方法体。
    * 若为表达式,则执行后返回结果;若为语句块,则按顺序执行,类似于方法中的语句。

Lambda表达式的常见语法格式如下:

**语法格式**| **描述**  
---|---  
`() -> System.out.println("Hello IsLand1314");`| 无参数,无返回值  
`(x) -> System.out.println(x);`| 有一个参数,无返回值  
`x -> System.out.println(x);`| 单个参数时,可省略括号  
`Comparatorcom = (x, y) -> { System.out.println("函数式接口"); return Integer.compare(x, y); };`| 两个以上参数,有返回值,多条语句  
`Comparatorcom = (x, y) -> Integer.compare(x, y);`| 单条语句时,省略return和大括号  
`(Integer x, Integer y) -> Integer.compare(x, y)`| 参数类型可省略,由编译器通过上下文推断,即“类型推断”  

#### 🥑 2. 函数式接口 

🥑 Lambda表达式简化了接口的实现,但并非所有接口都适用。

🧃 Lambda表达式本质上是一个匿名方法。当接口中的方法数量不为一时,Lambda表达式不适用。

  * Lambda表达式只能实现函数式接口,**函数式接口**定义:一个接口中只有一个抽象方法。

如下:

```java
// 函数式接口,只有一个抽象方法
interface Test {
    public void test();
}
  • 一个接口中,要求实现类必须实现的抽象方法只有一个!这样的接口就是函数式接口

补充:

🔖 @FunctionalInterface
  • 是一个注解,用于接口前,判断该接口是否为函数式接口。
  • 如果是函数式接口,没有问题。如果不是,则报错。
  • 功能类似于@Override
@FunctionalInterface
interface NoParameterNoReturn {
    // 注意:只能有一个方法
    void test();
}

但这种形式也是可行的:

@FunctionalInterface
interface NoParameterNoReturn {
    void test();
    default void test2() {
        System.out.println("JDK1.8新特性,default默认方法可以有具体的实现");
    }
}

注意:

  1. 如果一个接口只有一个抽象方法,则该接口为函数式接口。
  2. 如果我们在某个接口上声明了@FunctionalInterface注解,编译器将按照函数式接口的定义来要求该接口,若有两个抽象方法,程序编译会报错。
    1. 因此,从某种意义上说,只要你确保接口中只有一个抽象方法,可以不使用该注解。使用它将自动进行检测。
  3. Lambda表达式只能简化函数式接口的匿名内部类的写法。

🥑 3. 实际应用

🌈 如前所述,Lambda表达式本质上是一个匿名函数,其方法为:返回值 方法名 参数列表 方法体。

  • 在Lambda表达式中,我们只需关注:**参数列表

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4572.html

(0)
LomuLomu
上一篇 2024 年 12 月 28 日 上午2:05
下一篇 2024 年 12 月 28 日 上午2:35

相关推荐

  • SpringBoot3整合Swagger3时出现Type javax.servlet.http.HttpServletRequest not present错误

    目录 错误详情 错误原因 解决方法 引入依赖 修改配置信息 创建文件 访问 错误详情 错误原因 SpringBoot3和Swagger3版本不匹配 解决方法 使用springdoc替代springfox,具体步骤如下: 引入依赖 在pom.xml文件中添加如下依赖: org.springdoc springdoc-openapi-starter-webmvc…

    2025 年 1 月 19 日
    23800
  • 【Java】还在死磕算法?懂“堆”与“优先级队列”,代码效率飙升

    欢迎 💛点赞 🌟收藏 💫关注 🏆堆 一、🎯堆的定义 堆的概念 堆是一种特殊的完全二叉树,它通过一维数组顺序存储关键码集合K={k0,k1,k2,…,kn-1},并遵循特定的顺序关系来定义。具体来说,若对于任意节点Ki,都满足Ki = 0; parent–) { siftDown(parent, usedSize); } } public void si…

    2024 年 12 月 27 日
    24600
  • Java技术前沿——大数据机器学习在金融衍生品风险建模中的创新实践(244)

    🌟亲爱的技术探索者们,诚挚欢迎来到【云端科技驿站】!在这个数字化浪潮奔涌的时代,我们共同搭建了一个融合创新与实用的技术交流平台。这里不仅有前沿的技术解析,更期待您分享独到见解,让我们携手在科技海洋中扬帆远航!🌟全网平台(微信公众号/CSDN/抖音/华为/支付宝/微博):云端科技一、加入【技术精英联盟】快速通道1:【云端科技精英社群(2024新版)】快速通道2…

    2025 年 5 月 19 日
    7700
  • 使用 gt-checksum 迁移表结构到 GreatSQL

    将数据库表结构迁移至 GreatSQL 的实践指南 引言 本文旨在指导用户如何利用 gt-checksum 工具,将数据库表结构从 ORACLE 平台平滑迁移至 GreatSQL。以下是详细的操作步骤和配置说明。 工具介绍:gt-checksum gt-checksum 是由 GreatSQL 社区开发的开源静态数据库校验与修复工具,广泛支持包括 MySQL…

    未分类 2024 年 12 月 27 日
    23400
  • MySQL连接IDEA(Java Web)保姆级教程

    第一步:新建项目(File)->Project 第二步:New Project(JDK最好设置1.8版本与数据库适配,详细适配网请到MySQL官网查询MySQL :: MySQL 8.3 Reference Manual :: Search Results) 第三步:点中MySQLTest(项目名)并连续双击shift键->搜索Add Framework S…

    2025 年 1 月 15 日
    27800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信