lambda表达式
在lambda表达式中,没有⽅法的名字,只需要关⼼参数和⽅
法体。
参数:定义在⼩括号中
⽅法体:定义在⼤括号中
->:lambda运算符,分隔参数部分和⽅法体部分(读 goes)
注:使⽤lambda表达式简洁的实现接⼝,简化接⼝实现,和抽象类没关系
@FunctionalInterface 注解 验证一个接口是不是函数式接口
函数式接口:如果⼀个接⼝中,有且只有⼀个⽅法,是实现类必须要重写实现的,这样的接⼝,叫做函数式接⼝
lambda表达式存在的形式:
无参无返回值
@FunctionalInterface
public interface NoneReturnMutipleParameter {
void test(int a, int b);
}
// 1. 无参、无返回值接口实现
NoneReturnNoneParameter lambda1 = () -> {
System.out.println(“lambda1”);
};
lambda1.test();
无参有返回值
…
一个参数没有返回值
// 2. 有参数、无返回值
@FunctionalInterface
public interface SingleReturnNoneParameter {
int test();
}
NoneReturnSingleParameter lambda2 = (int a) -> {
System.out.println("lambda2 : " + a);
};
lambda2.test(10);
一个参数有返回值
…
多个参数没有返回值
…
多个参数有返回值
// 有参数、有返回值
@FunctionalInterface
public interface SingleReturnSingleParameter {
int test(int a);
}
SingleReturnMutipleParameter lambda3 = (int a, int b) -> {
System.out.println("lambda3");
return a + b;
};
int result = lambda3.test(10, 20);
System.out.println(result);
lambda表达式的语法精简
参数精简:
-
在lambda表达式中,参数的类型是可以省略的。
如果有多个参数,所有的参数的类型要么同时省略,要么同时不省略。
ambda1 = (a, b) -> {
return a + b;
}; -
在lambda表达式中,如果参数的数量只有一个,此时小括号可以省略。
lambda1 = a-> {
return a;
};
方法体精简:
- 如果方法体中的代码只有一行,则大括号可以省略。
SingleReturnSingleParameter lambda1 = x -> x * x; - 如果方法体中唯一的一行代码是返回语句,则省略掉大括号的同时,必须同时省略掉return
NoneReturnMutipleParameter lambda2 = (x, y) -> System.out.println(x + y);