Java Lambda

Summary::
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。

组成

特征

简洁性

Lambda 表达式提供了一种更为简洁的语法,尤其适用于函数式接口。相比于传统的匿名内部类,Lambda 表达式使得代码更为紧凑,减少了样板代码的编写。

实例

// 传统的匿名内部类  
Runnable runnable1 = new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("Hello World!");  
    }  
};  

// 使用 Lambda 表达式
Runnable runnable2 = () -> System.out.println("Hello World!");

函数式编程支持

Lambda 表达式是函数式编程的一种体现,它允许将函数当作参数传递给方法,或者将函数作为返回值,这种支持使得 Java 在函数式编程方面更为灵活,能够更好地处理集合操作、并行计算等任务。

实例

// 使用 Lambda 表达式作为参数传递给方法  
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");  
names.forEach(name -> System.out.println(name));  

变量捕获

Lambda 表达式可以访问外部作用域的变量,这种特性称为变量捕获,Lambda 表达式可以隐式地捕获 final 或事实上是 final 的局部变量。

实例

// 变量捕获  
int x = 10;  
MyFunction myFunction = y -> System.out.println(x + y);  
myFunction.doSomething(5); // 输出 15  

方法引用

Lambda 表达式可以通过方法引用进一步简化,方法引用允许你直接引用现有类或对象的方法,而不用编写冗余的代码。

实例

// 使用方法引用  
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");  
names.forEachprintln;  

可并行性

Lambda 表达式能够更方便地实现并行操作,通过使用 Stream API 结合 Lambda 表达式,可以更容易地实现并行计算,提高程序性能。

实例

// 使用 Lambda 表达式和 Stream API 进行并行计算  
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);  
int sum = numbers.parallelStreamintValue).sum(;  

Lambda 表达式的引入使得 Java 编程更加灵活、简洁,并推动了函数式编程的发展。

变量作用域

lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部修改定义在域外的局部变量,否则会编译错误。
lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)
在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量。

空方法引用

Pasted image 20240730113623.png

参考文章

Java Lambda 表达式 | 菜鸟教程