Lambda表示式(從程式碼理解定義)
阿新 • • 發佈:2020-10-31
1、Lambda表示式
Lambda 表示式是一種匿名函式(對 Java 而言這並不完全正確,但現在姑且這麼認為),簡單地說,它是沒有宣告的方法,也即沒有訪問修飾符、返回值宣告和名字。
你可以將其想做一種速記,在你需要使用某個方法的地方寫上它。當某個方法只使用一次,而且定義很簡短,使用這種速記替代之尤其有效,這樣,你就不必在類中費力寫宣告與方法了。
1.1基本方實現類法
首先看一下基礎的實現類,一般定義介面與實現介面的三種方法(一般實現類,靜態內部類,區域性內部類)。
package SunLambda; //對介面實現類進行呼叫。 public class Lambda_01 { //靜態內部類 static class ILike2 implements LambdaSun{ @Override public void Lambda() { System.out.println("學習Lambda讓我快樂!2"); } } public static void main(String[] args) { ILike iLike = new ILike(); iLike.Lambda(); ILike2 iLike2 = new ILike2(); iLike2.Lambda(); //區域性內部類 class ILike3 implements LambdaSun{ @Override public void Lambda() { System.out.println("學習Lambda讓我快樂!3"); } } ILike3 iLike3 = new ILike3(); iLike3.Lambda(); } } //定義介面 interface LambdaSun{ void Lambda(); } //定義介面實現類 class ILike implements LambdaSun{ @Override public void Lambda() { System.out.println("學習Lambda讓我快樂!"); } }
為什麼要用lambda?
使用lambda表示式可對一個介面進行簡潔的實現。
lambda對介面的要求
要求介面中定義的必須實現的抽象方法只能有一個(必須要實現的,不是default修飾的)。
1.2lambda簡化無參構造方法
package SunLambda; public class Lambda_02 { public static void main(String[] args) { //匿名內部類,沒有類的名稱,必須藉助介面或者是父親 LambdaSun1 lambda = new LambdaSun1() { @Override public void Lambda() { System.out.println("學習Lambda讓我快樂!5"); } }; lambda.Lambda(); //用Lambda方法進行簡化 LambdaSun1 lambd = () ->{ System.out.println("學習Lambda讓我快樂!6"); }; lambd.Lambda(); LambdaSun1 lambd1; //用Lambda方法進行簡化簡化2 lambd1= ()-> System.out.println("學習Lambda讓我快樂!7"); lambd1.Lambda(); } } //定義介面 interface LambdaSun1{ void Lambda(); }
Lambda實現介面,是有匿名內部類一步步實現的。
注:
1、Lambda表示式只有一行程式碼的情況下才能簡化為一行,多行的話必須使用程式碼塊(也就是{});
2、前提是介面是函式式介面;
3、介面多個引數型別可以去掉引數型別,要去掉都去掉,但必須加括號。
1.3Lambda簡化有引數方法
package SunLambda; public class Lambda_03 { public static void main(String[] args) { //匿名內部類 LambdaSun2 lambdasun = new LambdaSun2(){ @Override public void lambda(int a,int b,int c) { System.out.println(a+b+c); } }; lambdasun.lambda(1,1,1); LambdaSun2 lambda; //lambda簡化1 lambda =(int a,int b,int c)->{ System.out.println(a+b+c); }; lambdasun.lambda(2,2,2); //lambda簡化2 lambda =( a,b,c)->{ System.out.println(a+b+c); }; lambdasun.lambda(3,3,3); //lambda簡化3 lambda=( a,b,c)-> System.out.println(a+b+c); lambdasun.lambda(4,4,4); } } interface LambdaSun2{ void lambda(int a,int b,int c); }
注:介面多個引數型別可以去掉引數型別,要去掉都去掉,但必須加括號。
自學習於嗶哩嗶哩狂神說JAVA(侵刪);
作為自己的筆記,歡迎大家斧正!