语法进一步精简规则

在原本的语法基础上,Lambda表达式已经相对来说比较精简了,但在以下的应用场景中,我们就可以对Lambda表达式的语法进行精简,场景如下:

  1. 形参类型可以省略,如果需要省略,则每个形参的类型都要省略。
  2. 如果形参列表中只存在一个形参,那么形参类型和小括号都可以省略。
  3. 如果方法体当中只有一行语句,那么方法体的大括号也可以省略。
  4. 如果方法体中只有一条return语句,那么大括号可以省略,且必须去掉return关键字。

基本使用

结合更为精简的语法规则对Lambda表达式进行运用

无返回值函数式接口

情况一:无返回值无参数

1
2
3
4
5
6
7
8
9
NoParameterNoReturn obj1 = new NoParameterNoReturn() {
@Override
public void test() {
System.out.println("无参无返回值");
}
};
obj1.test();
NoParameterNoReturn obj2 = () -> System.out.println("无参无返回值");
obj2.test();

情况二:无返回值一个参数

1
2
3
4
5
6
7
8
9
OneParameterNoReturn obj21 = new OneParameterNoReturn() {
@Override
public void test(int num) {
System.out.println("无返回值一个参数 --> " + num);
}
};
obj21.test(10);
OneParameterNoReturn obj22 = num -> System.out.println("无返回值一个参数 --> " + num);
obj22.test(10);

情况三:无返回值多个参数

1
2
3
4
5
6
7
8
9
MoreParameterNoReturn obj31 = new MoreParameterNoReturn() {
@Override
public void test(String str1, String str2) {
System.out.println(str1 + " : " + str2);
}
};
obj31.test("hello", "world");
MoreParameterNoReturn obj32 = (str1, str2) -> System.out.println(str1 + " : " + str2);
obj32.test("hello", "world");

有返回值函数接口

情况一:有返回值无参数

1
2
3
4
5
6
7
NoParameterHasReturn obj41 = new NoParameterHasReturn() {
@Override
public int test() {
return 520;
}
};
NoParameterHasReturn obj42 = () -> 520;

情况二:有返回值一个参数

1
2
3
4
5
6
7
8
9
 OneParameterHasReturn obj51 = new OneParameterHasReturn() {
@Override
public String test(double num) {
return "传入的小数为:" + num;
}
};
System.out.println(obj51.test(520.0));
OneParameterHasReturn obj52 = num -> "传入的小数为:" + num;
System.out.println(obj52.test(520.0));

情况三:有返回值多个参数

1
2
3
4
5
6
7
8
9
MoreParameterHasReturn obj61 = new MoreParameterHasReturn() {
@Override
public String test(int num1, int num2) {
return "运算的结果为:" + (num1 + num2);
}
};
System.out.println(obj61.test(10, 20));
MoreParameterHasReturn obj62 = (num1, num2) -> "运算的结果为:" + (num1 + num2);
System.out.println(obj62.test(10, 20));