在 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 更强大

今天的学习就暂时告一段落。各位看官老爷,期待下次与您相见!

如果觉得内容对您有帮助,还请留下一个免费的点赞吧。

技术无止境,我们一起慢慢肝!

更多推荐