【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

相关推荐

  • 如何用串口调试助手ComTone调试串口?附安装包

    前言 大家好,我是小徐啊。我们在调试应用的时候,有时候是需要进行串口通信的。但并不是每次都有实时的串口数据供我们去测试,这个时候就需要一个模拟生成串口数据的工具来帮助我们了。今天,小徐就来介绍下串口调试助手ComTone的用法。文末附获取方式。 如何使用串口调试助手ComTone 首先,需要选择对应的端口号,这个必须是能联通的串口号,然后点击打开串口按钮,如…

    2025 年 1 月 13 日
    41500
  • java: JDK isn‘t specified for module ‘product-service‘问题解决

    目录 问题 解决方法 1.打开File->Project Structure… 2.将Project SDK修改为17 Oracle OpenJDK 17.0.12,并Apply,OK 问题 添加module后报错:java: JDK isn’t specified for module ‘product-service’ 查看pom.xml文件也添加了…

    2025 年 1 月 19 日
    39000
  • manim边做边学–动画更新

    今天介绍Manim中用于动画更新的3个类 ,分别是: UpdateFromFunc:根据自定义的函数来动态更新 Mobject 的属性 UpdateFromAlphaFunc:根据动画的进度来平滑地改变 Mobject 的属性 MaintainPositionRelativeTo:保持多个 Mobject 之间的相对位置关系 这3个类 分别从自定义更新、基于…

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

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

    2024 年 12 月 27 日
    38600
  • 高性能MySQL(第4版)PDF、EPUB免费下载

    适读人群 :不但适合数据库管理员(DBA)阅读,也适合开发人员参考学习。不管是数据库新手还是专家,相信都能从本书有所收获 领域经典十年后全版更新||全面拥抱8.0||重磅剖析现代云数据库与大规模运维实践||中国首批DBA精琢翻译5大头部国产数据库创始人联合力荐 电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍 点击原文去下载 书籍信息…

    2025 年 1 月 6 日
    38900

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信