学习 Java 的 Lambda 表达式,建议按照“先懂背景 → 再学语法 → 多写示例 → 结合 API”的路线来。下面我给你一个系统且易懂的学习路径。
Lambda 出现的背景是:Java 8 引入函数式编程特性,用来简化“只有一个方法的接口(函数式接口)”的实现。
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("hello");
}
}).start();
new Thread(() -> System.out.println("hello")).start();
✅ 更简洁、可读性更高
只有一个抽象方法的接口,叫函数式接口
@FunctionalInterface
interface MyInterface {
void say();
}
常见内置函数式接口(Java 提供):
Runnable → 无参无返回值Consumer<T> → 有参无返回值Supplier<T> → 无参有返回值Function<T, R> → 有参有返回值Predicate<T> → 有参返回 boolean(参数) -> { 方法体 }
() -> System.out.println("hi");
x -> System.out.println(x);
(a, b) -> a + b;
(x) -> {
System.out.println(x);
return x * 2;
};
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);
Function<Integer, String> f = String::valueOf;
BiPredicate<String, String> p = String::equals;
Comparator、Runnable❌ Lambda 不是匿名内部类的语法糖(本质不同)
❌ 不是所有接口都能用 Lambda
❌ 不要过度使用,影响可读性
如果你愿意,我可以:
你想从哪一步开始?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。