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

相关推荐
BillKu4 分钟前
Spring Boot 多环境配置
java·spring boot·后端
君不见,青丝成雪1 小时前
SpringBoot项目占用内存优化
java·spring boot·后端
一叶飘零_sweeeet2 小时前
如何避免MyBatis二级缓存中的脏读
java·redis·mybatis
Trust yourself2432 小时前
IDEA控制台乱码(Tomcat)解决方法
java·tomcat·intellij-idea
##学无止境##2 小时前
解锁Java分布式魔法:CAP与BASE的奇幻冒险
java·开发语言·分布式
3Cloudream2 小时前
互联网大厂Java面试深度解析:从基础到微服务云原生的全场景模拟
java·spring boot·redis·elasticsearch·微服务·kafka·电商架构
想买CT5的小曹2 小时前
SpringBoot如何获取系统Controller名称和方法名称
java·spring boot·后端
叫我阿柒啊3 小时前
Java全栈开发工程师的面试实战:从基础到微服务
java·数据库·spring boot·微服务·node.js·vue3·全栈开发
九仞山3 小时前
LangChain4j入门一:LangChain4j简介及核心概念
java·ai·langchain·agents
岁忧3 小时前
(LeetCode 每日一题) 498. 对角线遍历 (矩阵、模拟)
java·c++·算法·leetcode·矩阵·go