Java Lambda 表达式

📅 2026/7/9 12:37:11 👁️ 阅读次数 📝 编程学习
Java Lambda 表达式

Lambda 表达式的本质是:把行为(代码)当作参数传递。它让 Java 具备了函数式编程的能力,配合 Stream API 使用,可以写出非常简洁、优雅的代码。

Lambda

Lambda 表达式是 Java 8 引入的核心特性,它允许你以简洁的方式编写匿名函数(没有名字的方法),是函数式编程的基础。

基本语法

(参数列表)->{方法体}
部分说明
(参数列表)可以省略类型,多个参数用逗号分隔
->箭头操作符,分隔参数和方法体
{ 方法体 }单行可省略{}return
// 无参数()->System.out.println("Hello")// 一个参数(可省略括号)x->x*x// 多个参数(a,b)->a+b// 多行方法体(需要 {} 和 return)(x,y)->{intsum=x+y;returnsum*2;}

前提:函数式接口

Lambda 表达式只能用于函数式接口——即只有一个抽象方法的接口(可以有多个 default/static 方法)。

@FunctionalInterfacepublicinterfaceRunnable{voidrun();// 只有一个抽象方法}@FunctionalInterfacepublicinterfaceFunction<T,R>{Rapply(Tt);// 只有一个抽象方法}

常见使用场景

创建线程

// 传统写法newThread(newRunnable(){@Overridepublicvoidrun(){System.out.println("Hello");}}).start();// Lambda 写法newThread(()->System.out.println("Hello")).start();

Stream 流操作

List<String>names=users.stream().filter(user->user.getAge()>=18)// Predicate<User>.map(user->user.getName())// Function<User, String>.collect(Collectors.toList());

集合遍历

// 传统写法for(Stringname:names){System.out.println(name);}// Lambda 写法names.forEach(name->System.out.println(name));// 更简洁:方法引用names.forEach(System.out::println);

排序

List<String>list=Arrays.asList("b","c","a");// 传统写法Collections.sort(list,newComparator<String>(){@Overridepublicintcompare(Stringa,Stringb){returna.compareTo(b);}});// Lambda 写法Collections.sort(list,(a,b)->a.compareTo(b));// 更简洁list.sort(String::compareTo);

Lambda 与匿名内部类的区别

对比项匿名内部类Lambda 表达式
本质创建一个新类的实例不创建新类,直接指向方法实现
this指向指向内部类自身指向外部类实例
变量捕获可以修改实例变量只能引用有效 final 的局部变量
性能生成额外的.class文件更轻量(通过invokedynamic实现)