一、Lambda表达式的概念
在Java8语言中引入了Lambda表达式,基于操作符" -> "实现,该操作符被称为Lambda操作符或箭头操作符;
Lambda表达式左侧:指定了Lambda表达式需要的参数列表,对应接口的抽象方法的形参列表;
Lambda表达式右侧:指定了Lambda体,即Lambda表达式要执行的功能,对应接口的抽象方法的实现逻辑;
Lambda表达式本身是一个匿名方法(匿名函数),通常用于实现接口的抽象方法,然后直接赋值给接口变量,它可以使代码形式更简洁、更灵活;
/**************************************
* 样例1
*************************************/
/// 常规表达
Runnable runnable1 = new Runnable() {
@Override
public void run() {
System.out.println("Lambda");
}
};
new Thread(runnable1).start();
/// Lambda表达式:匿名方法 -> 接口实例
Runnable runnable2 = () -> System.out.println("Lambda");
new Thread(runnable2).start();
/// Lambda表达式:匿名方法 -> 匿名实例
new Thread(() -> System.out.println("Lambda")).start();
/**************************************
* 样例2
*************************************/
/// 常规表达
Comparator<Integer> com1 = new Comparator<Integer>() {
@Override
public int compare(Integer num1, Integer num2) {
return Integer.compare(num1, num2);
}
};
int result1 = com1.compare(99, 100);
System.out.println(result1);
/// Lambda表达式:匿名方法 -> 接口实例
Comparator<Integer> com2 = (num1, num2) -> Integer.compare(num1, num2);
int result2 = com2.compare(99, 100);
System.out.println(result2);
二、Lambda表达式的使用
1、Lambda无参数,无返回值
@Test
public void test() {
new Thread(() -> System.out.println("Lambda")).start();
}
2、Lambda有参数,无返回值
3、Lambda参数类型可以省略,因为编译器可以“类型推断”
@Test
public void test() {
Consumer<String> consumer = (s) -> System.out.println(s);
consumer.accept("Lambda");
}
4、Lambda一个参数时,其外面的小括号可以省略
5、 Lambda需要多个参数,多条语句,有返回值
@Test
public void test() {
Comparator<Integer> comparator = (num1, num2) -> {
......
return num1.compareTo(num2);
};
System.out.println(comparator.compare(100, 99)); //100 99 1
}
6、Lambda体只有一条语句时,return 与大括号都可省略
@Test
public void test() {
Comparator<Integer> comparator = ((num1, num2) -> num1.compareTo(num2));
System.out.println(comparator.compare(99, 100)); //1
Consumer<String> consumer = s -> System.out.println(s);
consumer.accept("Lambda"); //Lambda
}