Java 中,Lambda表达式 是 Java 8 引入的一个特性,用于简化代码,特别是在需要使用 函数式接口 的场景。它提供了一种简洁的方式来表示匿名函数,使代码更简洁和可读。


✅1. Lambda 表达式的基本语法

Lambda 表达式的语法结构如下:

1
(参数列表) -> { 方法体 }
  • 参数列表:可以有 0 个或多个参数。
  • 箭头操作符 ->:用于分隔参数和方法体。
  • 方法体:包含具体的代码逻辑。

示例:

1
2
3
4
5
6
7
8
9
10
11
// 无参数,直接执行
Runnable r = () -> System.out.println("Hello, Lambda!");
r.run();

// 有参数,有返回值
interface Calculator {
int add(int a, int b);
}

Calculator calc = (a, b) -> a + b;
System.out.println("结果: " + calc.add(5, 3));

✅2. 使用 Lambda 的条件

Lambda 表达式通常用于函数式接口

  • 函数式接口:只包含一个抽象方法的接口,通常用 @FunctionalInterface 注解标识。
  • Java 自带了很多函数式接口,例如 RunnableComparatorConsumer 等。

自定义函数式接口

1
2
3
4
5
6
7
8
9
10
11
@FunctionalInterface
interface Greeting {
void sayHello(String name);
}

public class Main {
public static void main(String[] args) {
Greeting greeting = name -> System.out.println("你好, " + name);
greeting.sayHello("小明");
}
}

✅3. 常见 Lambda 用法

(1) 使用 Lambda 实现 Runnable

1
2
Thread thread = new Thread(() -> System.out.println("线程运行中"));
thread.start();

(2) 使用 Lambda 进行集合遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.ArrayList;

public class Main {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");

// 使用 Lambda 表达式遍历
list.forEach(item -> System.out.println(item));
}
}

(3) 使用 Lambda 进行排序

1
2
3
4
5
6
7
8
9
10
11
import java.util.*;

public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("Banana", "Apple", "Orange");

// 使用 Lambda 表达式排序
Collections.sort(list, (a, b) -> a.compareTo(b));
System.out.println(list);
}
}

✅4. 使用方法引用

当 Lambda 表达式仅调用一个现有方法时,可以使用方法引用进一步简化代码。
语法: 类名::方法名对象名::方法名

示例:

1
2
3
4
List<String> list = Arrays.asList("Banana", "Apple", "Orange");

// 使用方法引用
list.forEach(System.out::println);

等价于:

1
list.forEach(item -> System.out.println(item));

✅5. 总结

  • Lambda 表达式 简化了匿名类的写法。
  • 只能用于函数式接口
  • 使用 -> 分隔参数和方法体。
  • 可以结合方法引用进一步简化代码。