生活随笔
收集整理的這篇文章主要介紹了
Lambda表达式详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
01:Lambda表達式
Lambda表達式標準格式:
-
由三部分組成:
a.一些參數
b.一個箭頭
c.一段代碼
-
格式:
(參數列表) ->{ 一些重寫方法的代碼};
-
解釋說明格式:
():接口中抽象方法的參數列表,沒有參數,就空著;有參數就寫出參數,多個參數使用逗號分隔,
->:傳遞的意思,把參數傳遞給方法體{}
{}:重寫接口的抽象方法的方法體
package com
.Lambda
;
public class Demo02Lambda {public static void main(String
[] args
) {new Thread(new Runnable() {@Overridepublic void run() {System
.out
.println(Thread
.currentThread().getName() + "新線程創建了");}}).start();new Thread(() ->{System
.out
.println(Thread
.currentThread().getName() + "新線程創建了");}).start();}
}
02:Lambda表達式無參數無返回值案例
需求:
package com
.Lambda
;
public class Demo03Cook {public static void main(String
[] args
) {invokeCoke(new Cook() {@Overridepublic void makeFood() {System
.out
.println("吃飯啦");}});invokeCoke(()->{System
.out
.println("吃飯啦");}); }public static void invokeCoke(Cook cook
){cook
.makeFood();}
}
Cook接口
package com
.Lambda
;
public interface Cook {public abstract void makeFood();
}
03:Lambda表達式有參數有返回值案例
lambda表達式有參數有返回值的練習
需求:
package com
.Lambda
;import java
.util
.Arrays
;
import java
.util
.Comparator
;
public class Demo04Arrays {public static void main(String
[] args
) {Person
[] arr
= {new Person("柳巖",39),new Person("楊冪",29),new Person("迪麗熱巴",26)};
Arrays
.sort(arr
,(Person o1
,Person o2
) ->{return o1
.getAge()-o2
.getAge(); } );for (Person p
: arr
) {System
.out
.println(p
);}}
}
Person類
package com
.Lambda
;public class Person {private String name
;private int age
;public Person() {}public Person(String name
, int age
) {this.name
= name
;this.age
= age
;}@Overridepublic String
toString() {return "Person{" +"name='" + name
+ '\'' +", age=" + age
+'}';}public void setName(String name
) {this.name
= name
;}public void setAge(int age
) {this.age
= age
;}public String
getName() {return name
;}public int getAge() {return age
;}
}
04:Lambda表達式有參數有返回值案例(自定義接口)
Lambda表達式有參數有返回值的練習
需求:
package com
.Lambda
;
public class Demo05Calculator {public static void main(String
[] args
) {invokeCalc(120, 130, new Calculator() {@Overridepublic int calc(int a
, int b
) {return a
+b
;}});invokeCalc(120,130,(int a
,int b
)->{return a
+b
;});}public static void invokeCalc(int a
,int b
,Calculator c
){int sum
= a
+ b
;System
.out
.println(sum
);}
}
計算器Calculator接口
package com
.Lambda
;
public interface Calculator {public abstract int calc(int a
,int b
);
}
05:Lambda表達式省略格式
Lambda表達式:是可推導,可以省略
-
凡是根據上下文推導出來的內容,都可以省略書寫
-
可以省略的內容
1.(參數列表):括號中參數列表的數據類型嗎,可以省略不寫
2.(參數列表):括號中的參數如果只有一個,那么類型和()都可以省略
3.{一些代碼}:如果{}中的代碼只有一行,無論是否有返回值,都可以省略{},return,分號;)
注意:要省略{},return,分號;必須一起省略
package com
.Lambda
;import com
.sun
.org
.apache
.bcel
.internal
.generic
.ARRAYLENGTH
;import java
.util
.ArrayList
;
public class Demo06ArrayList {public static void main(String
[] args
) {ArrayList
<String> list01
= new ArrayList<String>();ArrayList
<String> list02
= new ArrayList<>();}
}
package com
.Lambda
;
public class Demo02Lambda {public static void main(String
[] args
) {new Thread(new Runnable() {@Overridepublic void run() {System
.out
.println(Thread
.currentThread().getName() + "新線程創建了");}}).start();new Thread(() ->{System
.out
.println(Thread
.currentThread().getName() + "新線程創建了");}).start();new Thread(() -> System
.out
.println(Thread
.currentThread().getName() + "新線程創建了")).start();}
}
package com
.Lambda
;public class Demo03Cook {public static void main(String
[] args
) {invokeCoke(new Cook() {@Overridepublic void makeFood() {System
.out
.println("吃飯啦");}});invokeCoke(()->{System
.out
.println("吃飯啦");});invokeCoke(()-> System
.out
.println("吃飯啦"));}public static void invokeCoke(Cook cook
){cook
.makeFood();}
}
package com
.Lambda
;import java
.util
.Arrays
;
import java
.util
.Comparator
;public class Demo04Arrays {public static void main(String
[] args
) {Person
[] arr
= {new Person("柳巖",39),new Person("楊冪",29),new Person("迪麗熱巴",26)};
Arrays
.sort(arr
,(Person o1
,Person o2
) ->{return o1
.getAge()-o2
.getAge(); } );Arrays
.sort(arr
,(o1
, o2
) ->o1
.getAge()-o2
.getAge());for (Person p
: arr
) {System
.out
.println(p
);}}
}
package com
.Lambda
;public class Demo05Calculator {public static void main(String
[] args
) {invokeCalc(120, 130, new Calculator() {@Overridepublic int calc(int a
, int b
) {return a
+b
;}});invokeCalc(120,130,(int a
,int b
)->{return a
+b
;});invokeCalc(120,130,(a
,b
)-> a
+b
);}public static void invokeCalc(int a
,int b
,Calculator c
){int sum
= a
+ b
;System
.out
.println(sum
);}
}
06:Lambda使用前提
Lambda表達式使用前提
- 1.使用Lambda必須具有接口,且要求接口中有且僅有一個抽象方法
無論是JDK內置的Runnable、Comparator接口還是自定義的接口,只有當接口中的抽象方法存在且唯一時,才可以使用Lambda - 2.使用Lambda必須具有上下文推斷
也就是方法的參數或局部變量類型必須為Lambda對應的接口類型,才能使用Lambda作為該接口的實例。 - 備注:有且僅有一個抽象方法的接口.稱為"函數式編程"
總結
以上是生活随笔為你收集整理的Lambda表达式详解的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。