生活随笔
收集整理的這篇文章主要介紹了
Lambda表达式详解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
01:Lambda表達(dá)式
Lambda表達(dá)式標(biāo)準(zhǔn)格式:
-
由三部分組成:
a.一些參數(shù)
b.一個(gè)箭頭
c.一段代碼
-
格式:
(參數(shù)列表) ->{ 一些重寫方法的代碼};
-
解釋說(shuō)明格式:
():接口中抽象方法的參數(shù)列表,沒(méi)有參數(shù),就空著;有參數(shù)就寫出參數(shù),多個(gè)參數(shù)使用逗號(hào)分隔,
->:傳遞的意思,把參數(shù)傳遞給方法體{}
{}:重寫接口的抽象方法的方法體
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() + "新線程創(chuàng)建了");}}).start();new Thread(() ->{System
.out
.println(Thread
.currentThread().getName() + "新線程創(chuàng)建了");}).start();}
}
02:Lambda表達(dá)式無(wú)參數(shù)無(wú)返回值案例
需求:
-
給定一個(gè)廚子Cook接口,內(nèi)含唯一的抽象方法makeFood,且無(wú)參數(shù)、無(wú)返回值。
-
使用Lambda的標(biāo)準(zhǔn)格式調(diào)用invokeCook方法,打印輸出"吃飯啦!"字樣
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表達(dá)式有參數(shù)有返回值案例
lambda表達(dá)式有參數(shù)有返回值的練習(xí)
需求:
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表達(dá)式有參數(shù)有返回值案例(自定義接口)
Lambda表達(dá)式有參數(shù)有返回值的練習(xí)
需求:
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
);}
}
計(jì)算器Calculator接口
package com
.Lambda
;
public interface Calculator {public abstract int calc(int a
,int b
);
}
05:Lambda表達(dá)式省略格式
Lambda表達(dá)式:是可推導(dǎo),可以省略
-
凡是根據(jù)上下文推導(dǎo)出來(lái)的內(nèi)容,都可以省略書寫
-
可以省略的內(nèi)容
1.(參數(shù)列表):括號(hào)中參數(shù)列表的數(shù)據(jù)類型嗎,可以省略不寫
2.(參數(shù)列表):括號(hào)中的參數(shù)如果只有一個(gè),那么類型和()都可以省略
3.{一些代碼}:如果{}中的代碼只有一行,無(wú)論是否有返回值,都可以省略{},return,分號(hào);)
注意:要省略{},return,分號(hào);必須一起省略
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() + "新線程創(chuàng)建了");}}).start();new Thread(() ->{System
.out
.println(Thread
.currentThread().getName() + "新線程創(chuàng)建了");}).start();new Thread(() -> System
.out
.println(Thread
.currentThread().getName() + "新線程創(chuàng)建了")).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表達(dá)式使用前提
- 1.使用Lambda必須具有接口,且要求接口中有且僅有一個(gè)抽象方法
無(wú)論是JDK內(nèi)置的Runnable、Comparator接口還是自定義的接口,只有當(dāng)接口中的抽象方法存在且唯一時(shí),才可以使用Lambda - 2.使用Lambda必須具有上下文推斷
也就是方法的參數(shù)或局部變量類型必須為L(zhǎng)ambda對(duì)應(yīng)的接口類型,才能使用Lambda作為該接口的實(shí)例。 - 備注:有且僅有一個(gè)抽象方法的接口.稱為"函數(shù)式編程"
總結(jié)
以上是生活随笔為你收集整理的Lambda表达式详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。