【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

相关推荐

  • ChatGPT Plus长期使用订阅教程

    没有海外信用卡时,国内用户开通 ChatGPT Plus 往往会卡在付款环节。 国内用户更希望用微信或支付宝完成购买,再把会员开通到自己的原账号。下面的方式通过卡密和 Session 确认账号,适合想保留历史记录、工作资料和日常使用习惯的人。

    未分类 2026 年 6 月 11 日
    23600
  • [华为OD机考 – 密语传递 – 基于深度优先搜索的Java实现(2025 A卷 200分)]

    华为2025届OD机考A卷试题库持续更新中,专项练习 _ 戳此进入_ 专题导览 本系列试题已编入《华为OD机考Java真题全集(A/B/C/D/E卷)》。练习频次与中签率正相关, 添加哪吒微信,备注”华为OD备考”,加入专属刷题群 ,每道题配备:解题思路解析、完整代码实现、多组测试数据、算法选择依据、应用场景说明,题库实时更新,24小时在线答疑。 题目要求 …

    2025 年 5 月 12 日
    44200
  • ChatGPT Plus自己账号代充开通

    很多做客服知识库的人并不是不会注册 ChatGPT,而是卡在 Plus 付款这一步:需要确认账号后再付款时,官方订阅就会变得很绕。比较直接的处理方式,是把会员充值到自己的原账号上,先购买卡密,再提交当前账号的 Session,最后核对邮箱和账号信息。这样既不用换共享账号,也能继续保留平时的使用记录。

    未分类 2026 年 8 月 13 日
    7700
  • Grok Super微信支付宝代充开通教程

    Grok Super微信支付宝代充开通教程,整理国内用户用微信支付宝完成Grok Super充值、订阅和代充的操作流程。

    未分类 2026 年 6 月 30 日
    17800
  • Claude Pro开通会员充值开通方法

    Claude Pro开通会员充值开通方法,整理国内用户用微信支付宝完成Claude Pro充值、订阅和代充的操作流程。

    未分类 2026 年 6 月 30 日
    14600

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信