Java 的 Lambda 表达式整体来说不难懂,尤其如果你已经有了一点 Java 基础(比如接口、匿名内部类),理解起来会很快。下面我用通俗 + 对比的方式给你讲一下。
Lambda 表达式就是“一段可以当作参数传递的代码”,用来简化**只有一个抽象方法的接口(函数式接口)**的写法。
比如你有一个接口:
interface MyInterface {
void say(String msg);
}
以前你要这么用:
MyInterface m = new MyInterface() {
@Override
public void say(String msg) {
System.out.println(msg);
}
};
m.say("Hello");
问题:代码啰嗦,明明只想干一件事,却写了一堆模板代码。
MyInterface m = (msg) -> {
System.out.println(msg);
};
m.say("Hello");
甚至还能更短:
MyInterface m = msg -> System.out.println(msg);
✅ 是不是清爽很多?
(参数) -> { 方法体 }
// 无参数
() -> System.out.println("hi")
// 一个参数(括号可省略)
x -> x * 2
// 多个参数
(a, b) -> a + b
// 多行代码
(x, y) -> {
int sum = x + y;
return sum;
}
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s));
new Thread(() -> System.out.println("running")).start();
list.sort((a, b) -> a.length() - b.length());
✅ 只能用于“函数式接口”
什么是函数式接口?
只有一个抽象方法的接口
@FunctionalInterface
interface MyInterface {
void run();
}
Java 自带很多:
RunnableComparatorCallableFunctionConsumer✅ 好懂,而且很好用 ❌ 真正“坑”的地方不是语法,而是:
如果你愿意,我可以:
你想从哪一步开始?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。