一文搞懂Lambda 表达式
·
在 Java 8 之后,Lambda 表达式的出现让代码变得更简洁、更优雅,尤其是在集合操作和函数式编程中表现非常亮眼。
一、什么是 Lambda 表达式?
简单来说,Lambda 表达式就是“可以传递的函数”
它本质上是对“匿名函数”的一种简洁写法。
二、我们为什么要用 Lambda?
大家先来看一个对比
//传统写法(匿名内部类)
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Hello Lambda");
}
};
//Lambda 写法
Runnable r = () -> System.out.println("Hello Lambda");
优点很明显:
代码更简洁
可读性更强
减少了模板代码
三、Lambda 基本语法
(参数列表) -> { 方法体 }
常见的简化规则:
参数类型可以省略
(int a, int b) -> a + b
简化后:
(a, b) -> a + b
只有一个参数时,可以省略括号
x -> x * 2
只有一行代码时,可以省略 {} 和 return
(a, b) -> a + b
四、函数式接口
Lambda 表达式必须配合 函数式接口 使用。
函数式接口:只包含一个抽象方法的接口(大家可以自行搜索一下,这里就不详细展开)
示例:
@FunctionalInterface
interface MyFunction {
int add(int a, int b);
}
使用 Lambda
MyFunction f = (a, b) -> a + b;
System.out.println(f.add(1, 2));
五、Java 内置函数式接口
Java 在 java.util.function 包中提供了很多的现成接口,我们可以直接使用:
Consumer(消费型接口)
Consumer<String> c = s -> System.out.println(s);
c.accept("Hello");
//有输入,无返回
Supplier(供给型接口)
Supplier<String> s = () -> "Hello";
System.out.println(s.get());
//无输入,有返回
Function(函数型接口)
Function<Integer, Integer> f = x -> x * x;
System.out.println(f.apply(5));
//有输入,有返回
Predicate(断言型接口)
Predicate<Integer> p = x -> x > 0; System.out.println(p.test(10));
//返回 boolean
六、Lambda + 集合实战
1. 遍历集合
List<String> list = Arrays.asList("Java", "Python", "C++");
list.forEach(s -> System.out.println(s));
2. 排序
list.sort((a, b) -> a.length() - b.length());
3. Stream 流处理
list.stream()
.filter(s -> s.length() > 3)
.forEach(System.out::println);
七、Lambda 的升级版:方法引用
当 Lambda 只是调用一个已有方法时,我们就可以进一步简化:
示例
list.forEach(System.out::println);
等价于:
list.forEach(s -> System.out.println(s));
八、坑点
1. 只能用于函数式接口
// 错误:多个抽象方法
interface Test { void a(); void b(); }
2. 变量必须是有效的 final
int a = 10;
Runnable r = () -> {
// a = 20; 报错
System.out.println(a);
};
3. 可读性优先
Lambda 虽然简洁,但我们也不要滥用,否则可能会降低代码的可读性
九、小结
Lambda 表达式的核心价值:
简化代码
提高开发效率
支持函数式编程
配合 Stream 更强大
今天的学习就暂时告一段落。各位看官老爷,期待下次与您相见!
如果觉得内容对您有帮助,还请留下一个免费的点赞吧。
技术无止境,我们一起慢慢肝!
更多推荐


所有评论(0)