Java:关于Lambda表达式
关于Lambda表达式
Lambda表达式可以将方法像变量一样使用。与使用匿名类的函数式接口(只包含一个抽象方法的接口)相比,可以用更少的代码来编写。
为了理解 Stream API,以下的备忘录总结了必需的知识。
首先,我们来比较使用匿名类和使用Lambda表达式的情况。
如果要使用匿名类
// 関数型インタフェース宣言
interface SampleInterface {
public String methodA(String word);
}
public class Sample {
public static void main(String[] args) {
// 匿名クラス
SampleInterface si = new SampleInterface(){
@Override
public String methodA(String word) {
return "Hello" + word;
}
};
System.out.println(si.methodA("yamada")); // -> Hello yamada
}
}
如果要使用匿名类,请按照以下步骤进行操作。
-
- 如果需要的话,可以自己声明函数式接口
-
- 实例化匿名类(重写函数式接口的抽象方法)
- 通过方法调用来执行重写的操作
让我们使用Lambda表达式来简化代码。
如果使用lambda表达式
Lambda表达式的语法如下(虽然有多种省略模式,但这里只表示基础语法)。
(引数) -> {処理;};
在”{ }”之后,写入”;”。
这是因为Lambda表达式并不是在声明函数,而是将函数赋值给变量的”表达式”,因此需要在末尾加上”;”来表示必要性。
感谢您的指正。
而”}”后面的”;”并不是Lambda表达式的一部分,而是表示语句的结束符号。
传入的参数将与函数接口定义的抽象方法的参数具有相同的类型(变量名是任意的)。
// 関数型インタフェース宣言
interface SampleInterface {
public String methodA(String word);
}
public class Sample {
public static void main(String[] args) {
// ラムダ式(変数にメソッドを代入しているイメージ)
SampleInterface si = (String word) -> {return "Hello" + word;};
System.out.println(si.methodA("yamada")); // -> Hello yamada
}
}
使用匿名类时,描述变得更简单了。从这里可以进一步省略。
省略函数的参数部分
函数式接口因为只有一个抽象方法,可以推断出其类型,因此可以省略。
(word) -> {return "Hello" + word;};
※若省略了类型,则必须全部省略,否则会出错(某些省略是不允许的)。
在只有一个参数的情况下,甚至连括号()也可以省略。
word -> {return "Hello" + word;};
如果没有参数,就不能省略括号。
() -> {処理;};
部门缩减处理
如果 λ 表达式的处理只有一行,则可以省略 return 和 {}。
(word) -> {return "Hello" + word;};
这段代码
(word) -> "Hello" + word;
可以这样简略表达。
对省略模式进行总结
引数部分的省略
-
- 型を省略できる(関数型インタフェースはメソッドが1つなので推論できるため)
- 引数が一つの場合、( )も省略可能
关于处理部门的省略
- 処理が 1 行の場合、retun と{ }を省略できる
下次我想总结一下关于Stream API的内容。