java的lambda表達式是什么?下面就一起來了解一下吧~
Lambda 表達式被熟稱為:閉包,是推動 Java 8 發(fā)布的一個新特性,使用 Lambda 表達式可以使代碼變的更加簡潔緊湊。
語法
lambda 表達式的語法格式如下:
(parameters)?->?expression或(parameters)?->{?statements;?}以下是lambda表達式的重要特征:可選類型聲明:不需要聲明參數(shù)類型,編譯器可以統(tǒng)一識別參數(shù)值。
可選的參數(shù)圓括號:一個參數(shù)無需定義圓括號,但多個參數(shù)需要定義圓括號。
可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
可選的返回關(guān)鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定表達式返回了一個數(shù)值。
Lambda 表達式實例
Lambda?表達式的簡單例子: //?1.?不需要參數(shù),返回值為?5??()?->?5?? ??//?2.?接收一個參數(shù)(數(shù)字類型),返回其2倍的值??x?->?2?*?x?? ?? //?3.?接受2個參數(shù)(數(shù)字),并返回他們的差值??(x,?y)?->?x?–?y?? ?? //?4.?接收2個int型整數(shù),返回他們的和??(int?x,?int?y)?->?x?+?y?? ?? //?5.?接受一個?string?對象,并在控制臺打印,不返回任何值(看起來像是返回void)??(String?s)?->?System.out.print(s)
在 Java8Tester.java 文件輸入以下代碼:
Java8Tester.java?文件
public?class?Java8Tester?{
???public?static?void?main(String?args[]){
??????Java8Tester?tester?=?new?Java8Tester();????????
??????//?類型聲明
??????MathOperation?addition?=?(int?a,?int?b)?->?a?+?b;????????
??????//?不用類型聲明
??????MathOperation?subtraction?=?(a,?b)?->?a?-?b;????????
??????//?大括號中的返回語句
??????MathOperation?multiplication?=?(int?a,?int?b)?->?{?return?a?*?b;?};????????
??????//?沒有大括號及返回語句
??????MathOperation?division?=?(int?a,?int?b)?->?a?/?b;????????
??????System.out.println("10?+?5?=?"?+?tester.operate(10,?5,?addition));??????System.out.println("10?-?5?=?"?+?tester.operate(10,?5,?subtraction));??????System.out.println("10?x?5?=?"?+?tester.operate(10,?5,?multiplication));??????System.out.println("10?/?5?=?"?+?tester.operate(10,?5,?division));????????
??????//?不用括號
??????GreetingService?greetService1?=?message?->??????System.out.println("Hello?"?+?message);????????
??????//?用括號
??????GreetingService?greetService2?=?(message)?->??????System.out.println("Hello?"?+?message);????????
??????greetService1.sayMessage("Runoob");??????greetService2.sayMessage("Google");???}
????
???interface?MathOperation?{
??????int?operation(int?a,?int?b);???}
????
???interface?GreetingService?{
??????void?sayMessage(String?message);???}
????
???private?int?operate(int?a,?int?b,?MathOperation?mathOperation){
??????return?mathOperation.operation(a,?b);???}}執(zhí)行以上腳本,輸出結(jié)果為:
$?javac?Java8Tester.java $?java?Java8Tester10?+?5?=?1510?-?5?=?510?x?5?=?5010?/?5?=?2Hello?RunoobHello?Google
使用 Lambda 表達式需要注意以下兩點:
Lambda 表達式主要用來定義行內(nèi)執(zhí)行的方法類型接口,例如,一個簡單方法接口。在上面例子中,我們使用各種類型的Lambda表達式來定義MathOperation接口的方法。然后我們定義了sayMessage的執(zhí)行。
Lambda 表達式免去了使用匿名方法的麻煩,并且給予Java簡單但是強大的函數(shù)化的編程能力。

以上就是小編今天的分享了,希望可以幫助到大家。