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 表达式的使用条件

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

常见的函数式接口:

  • Runnable(void run())
  • Callable<V>(V call() throws Exception)
  • Comparator<T>(int compare(T o1, T o2))
  • Netty 中的 TimerTask(void 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 对函数式编程的支持,本质是 "函数式接口的简化实现方式"。它通过简洁的语法传递代码块,让开发者更专注于业务逻辑,尤其在处理回调、事件监听等场景时非常实用。

相关推荐
鬼手点金13 分钟前
Agent 的学习机制:后训练、上下文学习与外部化学习
java·人工智能·git·学习·自动化·nanogpt
小陈不好吃23 分钟前
equals 与 hashCode 的契约关系:从 HashMap 到 Lombok 注解
java·hashmap·lombok
xiaogai_gai40 分钟前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
打工仔折腾 AI1 小时前
用 Dashlet 把极空间 NAS 服务入口整理成统一导航首页的实践
java·开发语言·人工智能·后端·python·rpc·ai agent 实战
小蒜学长2 小时前
微信小程序-高校自习室管理系统(代码+数据库+LW)
java·spring boot·后端·微信小程序·自习室管理
鸥梨菌Honevid2 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet
瑞克-桑切斯3 小时前
真实企业场景 运维安全与管理
java·网络·github
老板一杯拿铁3 小时前
Java 八股文面试详解:从基础到进阶的全面梳理
java·面试
const_qiu3 小时前
第 2.5 章 2.5.4-2.5.5:JWT 双 Token 与声明式权限守卫
java·人工智能
bug菌3 小时前
一个周末就想把短链服务推到 10 万 QPS,真能靠加 Redis 做到吗?
java·redis·go