一、概念
在 Java 中,Lambda
表达式是从 Java 8 开始引入的重要特性,简化了函数式接口的匿名内部类的书写,作为一种更紧凑的代码风格,使 Java 的语言表达能力得到了提升,让我们不用关注需要使用什么对象,而是关注对数据进行什么样的操作,它使代码更加简洁和灵活。
函数式编程:
- 函数式编程(Functional Programming)是一种思想范式,和面向对象不同的是,它忽略了面向对象的复杂语法,强调的是做什么,而不是谁去做。在 Java 中,
Lambda表达式
、方法引用
、Stream流
,都是函数式编程的具体实现。
二、使用前提
Lambda
表达式只能简化函数式接口的匿名内部类的写法,函数式接口指的是只包含一个抽象方法的接口。
在 Java 8 中,函数式接口可以使用 @FunctionalInterface
注解来明确标识,但这不是强制要求的。只要满足 “只有一个抽象方法” 这个条件,即使没有该注解,也会被 Java 编译器视为函数式接口。
三、书写格式
这边我为大家写两个样例,可以更为直观的看到 Lambda
表达式是怎么简化 匿名内部类的书写的。
3.1 匿名内部类
import java.util.Arrays;
import java.util.Comparator;
public class Test {
public static void main(String[] args) {
// 创建一个数组
Integer[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 调用数组的 sort() 排序数组,从大到小
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
// 打印数组
System.out.println("数组元素:" + Arrays.toString(arr));
}
}
运行结果:
数组元素:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
3.2 Lambda表达式
Lambda
表达式的基本语法形式为:(参数列表) -> { 方法体 } 。
参数列表:相当于方法的参数;
->:Lambda
表达式的固定格式;
方法体:则是方法具体的逻辑。
import java.util.Arrays;
import java.util.Comparator;
// 测试类
public class Test {
public static void main(String[] args) {
// 创建一个数组
Integer[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 调用数组的 sort() 排序数组,从大到小
Arrays.sort(arr, (o1, o2) -> o2 - o1);
// 打印数组
System.out.println("数组元素:" + Arrays.toString(arr));
}
}
简写规则:
- 参数类型可以省略不写;
- 如果只有一个参数,小括号()也可以不写;
- 如果方法体只有一行,
大括号 {}
,分号 ;
,return
都可以不写;