【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 API】leetcode常用刷题API及ACM模式

    文章目录 ACM输入 Scanner 一、字符串高频API 二、集合高频API 三、栈(Stack)高频API 1. 推荐用Deque替代Stack类(更高效且线程不安全,适合算法场景) 2. 核心操作 3. 经典应用场景 4. 避坑指南 四、链表(LinkedList)高频API 1. 内置LinkedList类 2. 核心操作 3. 自定义链表节点(Le…

    未分类 2025 年 5 月 13 日
    38100
  • ChatGPT-Plus共享账号,全网最高性价比!

    系统界面展示,原汁原味的官方ChatGPT-Plus! 这可能不是我用过最便宜的ChatGPT共享账号,但绝对是性价比最高,用起来最稳定的平台,没有之一! 我们有专业的技术团队,已经稳定运营一年之久。我们的维护成本很大,基本大家下单的钱都用于账号购买和技术升级,基本没有多少的利润,只为给大家提供一个安全/稳定的GPT服务。如果网站体验好,请帮我们宣传,足够的…

    2024 年 7 月 10 日
    3.0K00
  • 深入解析 Spring AI 系列:以OpenAI与Moonshot案例为例寻找共同点

    今天,我们将重点探讨对接的业务逻辑。为了帮助大家更直观地掌握其中的规律性,我将通过对比OpenAI与《月之暗面》中的Moonshot两个案例来阐述这一点。通过这样的对比,大家可以更清晰地看到,这些对接业务的整体框架其实非常相似。换句话说,我们要做的工作只是其中的一小部分,但它同样是关键的一环。 好了,接下来我们就开始深入了解这个话题。 模型对接 我们首先需要…

    2025 年 1 月 11 日
    61100
  • 深入理解 Java 接口的回调机制

    前言 回调是一种非常重要的编程技术,它广泛应用于事件驱动的编程、异步任务和框架设计中。在 Java 中,回调机制通常通过 接口 来实现。本篇博客将详细解析 Java 接口的回调原理、实现方式,以及实际开发中的应用场景。 泪崩了,期末JAVA编程考了回调,小编不会。 一、什么是回调? 回调(Callback) 是指通过将一个方法作为参数传递给另一个方法,在某些…

    2025 年 1 月 21 日
    41600
  • Java怎样实现将数据导出为Word文档

    文章首发于我的博客:Java怎样实现将数据导出为Word文档 – Liu Zijian’s Blog 我们在开发一些系统的时候,例如OA系统,经常能遇到将审批单数据导出为word和excel文档的需求,导出为excel是比较简单的,因为excel有单元格来供我们定位数据位置,但是word文档的格式不像表格那样可以轻松的定位,要想将数据导出为一些带有图片和表格…

    2025 年 1 月 14 日
    48500

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信