Lambda 表达式简单使用指南(卷死队友脑细胞的方法 不管你看懂看不懂 反正我就要这么写 哈哈哈哈哈)


一、什么是 Lambda 表达式?

Lambda 表达式是 Java 8 引入的一种简洁表达函数式接口实例的写法。它让代码更简洁,更易读,尤其在集合处理和事件处理场景下非常方便。

二、Lambda 基础语法

1
2
3
(parameters) -> expression
或者
(parameters) -> { statements; }

示例:

1
Runnable r = () -> System.out.println("Hello Lambda!");

三、常见使用场景

1. 替代匿名内部类

传统写法:

1
2
3
4
5
6
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread running");
}
}).start();

Lambda 写法:

1
new Thread(() -> System.out.println("Thread running")).start();

2. 集合排序

1
2
List<String> list = Arrays.asList("apple", "banana", "orange");
list.sort((s1, s2) -> s1.compareTo(s2));

也可以用方法引用:

1
list.sort(String::compareTo);

3. 过滤和遍历集合

1
2
3
4
List<String> list = Arrays.asList("apple", "banana", "orange");
list.stream()
.filter(s -> s.startsWith("a"))
.forEach(System.out::println);

四、深入用法

1. 函数式接口

Lambda 表达式只能用于函数式接口(只有一个抽象方法的接口),比如 RunnableComparatorConsumerFunction 等。

2. 变量作用域

Lambda 表达式中可以访问外部的 final 或等效 final 变量,但不能修改它们。

3. 多行语句

如果 Lambda 体内有多条语句,需要用大括号包裹,并用 return 返回值(如果有返回值)。

1
2
3
4
Function<Integer, Integer> square = (x) -> {
int result = x * x;
return result;
};

4. 异常处理

Lambda 中如果代码可能抛异常,需要自行处理,不能直接抛出检查异常。

五、实战示例

假设有一个任务列表,需要过滤出优先级高的任务并打印:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Task {
String name;
int priority;
Task(String name, int priority) {
this.name = name;
this.priority = priority;
}
public int getPriority() { return priority; }
public String getName() { return name; }
}

List<Task> tasks = Arrays.asList(
new Task("task1", 10),
new Task("task2", 5),
new Task("task3", 8)
);

tasks.stream()
.filter(t -> t.getPriority() > 7)
.forEach(t -> System.out.println(t.getName()));

如果你在使用过程中有更好的实践心得,欢迎留言交流。