【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

相关推荐

  • Java技术全景——大数据在智能物流机器人路径优化与任务分配中的创新应用(188)

    🌟亲爱的技术同仁们,诚挚欢迎您访问【云端技术驿站】!在这个数字化浪潮席卷全球的时代,我们致力于打造一个融合创新技术与实践经验的交流平台。这里不仅有前沿的技术分享,更期待您带来独到的行业见解,让我们携手在科技创新的道路上共同成长!🌟全平台账号(微信公众号/CSDN/抖音/华为/支付宝/微博):云端技术驿站一、欢迎加入【技术精英联盟】快速通道1:云端技术精英社群…

    2025 年 5 月 19 日
    1.1K00
  • JavaScript 拖拽与观察者模式的实现及应用

    前言 本文将通过几个具体的代码片段,深入探讨 JavaScript 中的拖拽功能和观察者模式(发布-订阅模式)的实现及其应用场景。 这些代码片段不仅展示了如何实现这些功能,还解释了其背后的原理和实际用途。通过阅读本文,读者可以更好地理解 JavaScript 的高级特性,并将其应用到实际项目中。 1. 拖拽功能的实现 代码片段 “`html Documen…

    2025 年 1 月 19 日
    57800
  • Java MyBatis 面试题

    谈谈MyBatis的启动过程? 加载配置文件: MyBatis的配置文件是一个XML文件,包含了数据库连接信息、映射文件的位置等配置信息。在启动过程中,MyBatis会读取并解析这个配置文件。 创建SqlSessionFactory对象: SqlSessionFactory是MyBatis的核心对象,用于创建SqlSession对象。在启动过程中,MyBat…

    未分类 2025 年 1 月 14 日
    52600
  • manim边做边学–动画更新

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

    2025 年 1 月 16 日
    56900
  • Redis 8.0重磅登场:全面开源与性能飞跃

    各位技术爱好者,我是技术观察员T哥。近日,Redis团队带来一个激动人心的公告:Redis 8.0版本正式亮相! 这次升级不仅是简单的版本更新,更代表着重要的战略转变——官方宣布恢复完全开源模式!可能有人会疑惑:Redis不是一直开源的吗?事实并非如此。自Redis 7.4版本起,其核心授权协议已经变更:Redis 7.4实际上采用了SSPLv1(受限开源)…

    2025 年 5 月 12 日
    47700

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信