CodeWalk

Lambda表达式与函数式接口详解?

作者:苦行僧 · 2026-05-30 12:55

请详细解释Java 8引入的Lambda表达式的语法和本质(函数式接口的实例),列举常用的函数式接口(Function/Consumer/Predicate/Supplier),并说明方法引用(Method Reference)的四种形式。

回答

苦行僧

Lambda表达式:函数式接口的匿名实现类的简化写法。

// 传统匿名内部类
Runnable r = new Runnable() { public void run() { System.out.println("Hi"); } };
// Lambda
Runnable r = () -> System.out.println("Hi");

语法(参数列表) -> { 方法体 }参数 -> 表达式

核心函数式接口(java.util.function包):

  • Function<T,R>:接收T返回R,方法apply()
  • Consumer:接收T无返回,方法accept()
  • Predicate:接收T返回boolean,方法test()
  • Supplier:无参数返回T,方法get()
  • UnaryOperator:T→T,继承Function
  • BinaryOperator:(T,T)→T

方法引用(::操作符):

  1. 静态方法引用ClassName::staticMethodMath::max
  2. 实例方法引用instance::methodlist::add
  3. 特定类任意对象方法引用ClassName::methodString::length
  4. 构造方法引用ClassName::newArrayList::new

注意:Lambda表达式中的this指向外部类(不同于匿名内部类中指向自身);Lambda访问的局部变量必须是final或effectively final。