W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
使用lambda表達式的一般語法是
(Parameters) -> { Body }
->
分隔參數(shù)和lambda表達式主體。
參數(shù)括在括號中,與方法相同,而lambda表達式主體是用大括號括起來的代碼塊。
lambda表達式主體可以有局部變量,語句。我們可以在lambda表達式主體中使用break,continue和return。我們甚至可以從lambda表達式主體中拋出異常。
lambda表達式?jīng)]有名稱,因為它表示匿名內(nèi)部類。
lambda表達式的返回類型由編譯器推斷。
lambda表達式不能像方法一樣有throws子句。
lambda表達式不能是泛型,而泛型在函數(shù)接口中定義。
未聲明其參數(shù)類型的lambda表達式稱為隱式lambda表達式。
顯式lambda表達式是一個lambda表達式,它聲明其參數(shù)的類型。
編譯器將推斷用于隱式lambda表達式的參數(shù)類型
以下代碼使用單一方法創(chuàng)建接口,并將其用作lambda表達式類型。當(dāng)創(chuàng)建lambda表達式時,我們聲明參數(shù) s1
的類型為Integer
類型。
public class Main { public static void main(String[] args) { MyIntegerCalculator myIntegerCalculator = (Integer s1) -> s1 * 2; System.out.println("1- Result x2 : " + myIntegerCalculator.calcIt(5)); } } interface MyIntegerCalculator { public Integer calcIt(Integer s1); }
上面的代碼生成以下結(jié)果。
這里是沒有使用類型的演示。當(dāng)忽略類型時,編譯器必須計算出來。
public class Main { public static void main(String[] args) { MyIntegerCalculator myIntegerCalculator = (s1) -> s1 * 2; System.out.println("1- Result x2 : " + myIntegerCalculator.calcIt(5)); } } interface MyIntegerCalculator { public Integer calcIt(Integer s1); }
上面的代碼生成以下結(jié)果。
我們可以選擇省略lambda表達式中的參數(shù)類型。
在lambda表達式 (int x, int y) -> { return x + y; }
聲明的參數(shù)類型。
我們可以安全地重寫lambda表達式,省略參數(shù)類型
(x, y) -> { return x + y; }
如果我們選擇省略參數(shù)類型,我們必須省略所有參數(shù)的類型。
public class Main { public static void main(String[] argv) { Processor stringProcessor = (str) -> str.length(); String name = "Java Lambda"; int length = stringProcessor.getStringLength(name); System.out.println(length); } } @FunctionalInterface interface Processor { int getStringLength(String str); }
上面的代碼生成以下結(jié)果。
對于單個參數(shù)lambda表達式,我們可以省略括號,因為我們省略了參數(shù)類型。
lambda表達式 (String msg) -> {System.out.println(msg);}
有一切。
然后我們可以省略參數(shù)類型
(msg)->{System.out.println(msg);}
我們可以進一步省略參數(shù)類型和括號,如下所示。
msg -> { System.out.println(msg); }
public class Main { public static void main(String[] argv) { Processor stringProcessor = str -> str.length(); String name = "Java Lambda"; int length = stringProcessor.getStringLength(name); System.out.println(length); } } @FunctionalInterface interface Processor { int getStringLength(String str); }
上面的代碼生成以下結(jié)果。
對于沒有參數(shù)的lambda表達式,我們?nèi)匀恍枰ㄌ枴?/p>() -> { System.out.println("hi"); }
以下示例顯示如何使用 BooleanSupplier
。
import java.util.function.BooleanSupplier; public class Main { public static void main(String[] args) { BooleanSupplier bs = () -> true; System.out.println(bs.getAsBoolean()); int x = 0, y= 1; bs = () -> x > y; System.out.println(bs.getAsBoolean()); } }
上面的代碼生成以下結(jié)果。
您可以在參數(shù)聲明中為表達式lambda表達式使用 final
修飾符。
以下lambda表達式使用final修飾符。
(final int x, final int y) -> { return x + y; }
我們可以只使用一個修飾符如下。
(int x, final int y) -> {return x + y;}
public class Main { public static void main(String[] argv) { Processor stringProcessor = (final String str) -> str.length(); String name = "Java Lambda"; int length = stringProcessor.getStringLength(name); System.out.println(length); } } @FunctionalInterface interface Processor { int getStringLength(String str); }
上面的代碼生成以下結(jié)果。
lambda表達式主體可以是塊語句或單個表達式。
塊語句用大括號括起來,而單個表達式可以沒有大括號。
在塊語句中,我們可以使用 return
語句返回值。
以下lambda表達式使用塊語句并使用 return
語句返回總和。
(int x, int y) -> { return x + y; }
下面的lambda使用了一個表達式:
(int x, int y) -> x + y
表達式不需要大括號。
lambda不必返回值。以下兩個lambda表達式只是將參數(shù)輸出到標(biāo)準(zhǔn)輸出,不返回任何內(nèi)容。
(String msg)->{System.out.println(msg);}// a block statement (String msg)->System.out.println(msg) //an expression
例:
public class Main { public static void main(String[] argv) { Processor stringProcessor = (String str) -> str.length(); String name = "Java Lambda"; int length = stringProcessor.getStringLength(name); System.out.println(length);// www . j a va 2 s. co m } } @FunctionalInterface interface Processor { int getStringLength(String str); }
上面的代碼生成以下結(jié)果。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: