Java 中的 Lambda 表达式 是 Java 8 引入的重要特性,主要用于简化函数式接口(只有一个抽象方法的接口)的实现,常见于集合操作、线程、事件处理等场景。
(参数列表) -> { 方法体 }
传统匿名内部类:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程执行");
}
}).start();
使用 Lambda:
new Thread(() -> System.out.println("线程执行")).start();
函数式接口:只有一个抽象方法的接口(可用 @FunctionalInterface 标注)
@FunctionalInterface
interface MyInterface {
void show(String msg);
}
使用 Lambda:
MyInterface mi = (msg) -> System.out.println(msg);
mi.show("Hello Lambda");
| 接口 | 方法 | 说明 |
|---|---|---|
Runnable |
run() |
无参无返回值 |
Consumer<T> |
accept(T) |
有参无返回值 |
Supplier<T> |
get() |
无参有返回值 |
Function<T,R> |
apply(T) |
有参有返回值 |
Predicate<T> |
test(T) |
返回 boolean |
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s));
list.sort((a, b) -> a.compareTo(b));
list.stream()
.filter(s -> s.startsWith("a"))
.forEach(System.out::println);
list.forEach(System.out::println);
常见形式:
对象::方法名类::静态方法类::实例方法类::new✅ 只能用于函数式接口
✅ 参数类型可以省略(编译器推断)
✅ 方法体只有一行可省略 {} 和 return
❌ 不能直接使用非 final 的局部变量(effectively final)
int num = 10;
Runnable r = () -> System.out.println(num); // OK
Lambda = 更简洁的“方法作为参数”
如果你愿意,我也可以:
你目前是初学者还是准备面试/项目中使用?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。