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

相关推荐
2501_916766541 天前
【JVM】类的加载机制
java·jvm
Sag_ever1 天前
Java数组详解
java
张np1 天前
java基础-ConcurrentHashMap
java·开发语言
一嘴一个橘子1 天前
spring-aop 的 基础使用 - 4 - 环绕通知 @Around
java
小毅&Nora1 天前
【Java线程安全实战】⑨ CompletableFuture的高级用法:从基础到高阶,结合虚拟线程
java·线程安全·虚拟线程
冰冰菜的扣jio1 天前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
小璐猪头1 天前
专为 Spring Boot 设计的 Elasticsearch 日志收集 Starter
java
ps酷教程1 天前
HttpPostRequestDecoder源码浅析
java·http·netty
闲人编程1 天前
消息通知系统实现:构建高可用、可扩展的企业级通知服务
java·服务器·网络·python·消息队列·异步处理·分发器
栈与堆1 天前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust