Lambda 表达式

Lambda 表达式是 Java 8 引入的一种函数式编程语法 ,用于简化函数式接口 (只有一个抽象方法的接口)的实现代码。它的核心作用是用更简洁的方式传递 "一段可执行的代码块",避免了传统匿名内部类的冗余模板代码。

一、Lambda 表达式的基本语法

语法格式:

复制代码
(参数列表) -> { 代码块 }
  • (参数列表):与函数式接口中抽象方法的参数列表一致(参数类型可省略,Java 会自动推断)。
  • ->:箭头符号,用于分隔参数列表和代码块。
  • { 代码块 }:要执行的逻辑,即对抽象方法的实现(若代码块只有一行,可省略 {};)。

二、为什么需要 Lambda 表达式?

对比传统匿名内部类和 Lambda 表达式的写法,就能直观感受到它的优势:

场景:用 Runnable 接口创建线程
  1. 传统匿名内部类写法(冗余):

    复制代码
    new Thread(new Runnable() {
        @Override
        public void run() {  // 必须显式写出接口、方法名、@Override
            System.out.println("线程执行");
        }
    }).start();
  2. Lambda 表达式写法(简洁):

    复制代码
    new Thread(() -> System.out.println("线程执行")).start();

    Runnable 是函数式接口,只有一个 run() 方法,Lambda 直接省略了所有模板代码)

三、Lambda 表达式的使用条件

必须满足:只针对函数式接口(即接口中只有一个抽象方法)。

常见的函数式接口:

  • Runnablevoid run()
  • Callable<V>V call() throws Exception
  • Comparator<T>int compare(T o1, T o2)
  • Netty 中的 TimerTaskvoid run(Timeout timeout)

四、Lambda 表达式的简化规则

根据代码复杂度,Lambda 可以进一步简化:

  1. 参数类型可省略(Java 会自动推断):

    复制代码
    // 原写法(带参数类型)
    (int a, int b) -> a + b;
    // 简化后(省略类型)
    (a, b) -> a + b;
  2. 单个参数可省略括号

    复制代码
    // 原写法(带括号)
    (s) -> System.out.println(s);
    // 简化后(省略括号)
    s -> System.out.println(s);
  3. 代码块只有一行时,可省略 {};

    复制代码
    // 原写法(带 {} 和 ;)
    (a, b) -> { return a + b; };
    // 简化后(省略)
    (a, b) -> a + b;

五、Lambda 表达式的核心价值

  1. 简化代码 :去除匿名内部类的冗余模板(如 new 接口() {}@Override、方法名),让代码更简洁。
  2. 专注逻辑:直接传递 "要执行的逻辑",而不是 "实现接口的对象",更符合函数式编程思想。
  3. 提升可读性:减少样板代码后,核心逻辑更突出,代码更易理解。

总结

Lambda 表达式是 Java 对函数式编程的支持,本质是 "函数式接口的简化实现方式"。它通过简洁的语法传递代码块,让开发者更专注于业务逻辑,尤其在处理回调、事件监听等场景时非常实用。

相关推荐
泉城老铁35 分钟前
springboot实现对接poi 导出excel折线图
java·spring boot·后端
金銀銅鐵1 小时前
[Java] 如何自动生成简单的 Mermaid 类图
java·后端
纵横八荒1 小时前
Java基础加强13-集合框架、Stream流
java·开发语言
稚辉君.MCA_P8_Java1 小时前
kafka解决了什么问题?mmap 和sendfile
java·spring boot·分布式·kafka·kubernetes
乄bluefox1 小时前
保姆级docker部署nacos集群
java·docker·容器
欣然~2 小时前
百度地图收藏地址提取与格式转换工具 说明文档
java·开发语言·dubbo
玩毛线的包子2 小时前
Android Gradle学习(十三)- 配置读取和文件写入
java
青岛少儿编程-王老师2 小时前
CCF编程能力等级认证GESP—C++6级—20250927
java·c++·算法
一條狗3 小时前
学习日报 20251007|深度解析:基于 Guava LoadingCache 的优惠券模板缓存设计与实现
java·oracle·loadingcache
Miraitowa_cheems3 小时前
LeetCode算法日记 - Day 64: 岛屿的最大面积、被围绕的区域
java·算法·leetcode·决策树·职场和发展·深度优先·推荐算法