
Lambda 表达式的本质是把行为代码当作参数传递。它让 Java 具备了函数式编程的能力配合 Stream API 使用可以写出非常简洁、优雅的代码。LambdaLambda 表达式是 Java 8 引入的核心特性它允许你以简洁的方式编写匿名函数没有名字的方法是函数式编程的基础。基本语法(参数列表)-{方法体}部分说明(参数列表)可以省略类型多个参数用逗号分隔-箭头操作符分隔参数和方法体{ 方法体 }单行可省略{}和return// 无参数()-System.out.println(Hello)// 一个参数可省略括号x-x*x// 多个参数(a,b)-ab// 多行方法体需要 {} 和 return(x,y)-{intsumxy;returnsum*2;}前提函数式接口Lambda 表达式只能用于函数式接口——即只有一个抽象方法的接口可以有多个 default/static 方法。FunctionalInterfacepublicinterfaceRunnable{voidrun();// 只有一个抽象方法}FunctionalInterfacepublicinterfaceFunctionT,R{Rapply(Tt);// 只有一个抽象方法}常见使用场景创建线程// 传统写法newThread(newRunnable(){Overridepublicvoidrun(){System.out.println(Hello);}}).start();// Lambda 写法newThread(()-System.out.println(Hello)).start();Stream 流操作ListStringnamesusers.stream().filter(user-user.getAge()18)// PredicateUser.map(user-user.getName())// FunctionUser, String.collect(Collectors.toList());集合遍历// 传统写法for(Stringname:names){System.out.println(name);}// Lambda 写法names.forEach(name-System.out.println(name));// 更简洁方法引用names.forEach(System.out::println);排序ListStringlistArrays.asList(b,c,a);// 传统写法Collections.sort(list,newComparatorString(){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实现