eclipse做企業(yè)網(wǎng)站品牌策劃方案怎么做
文章目錄
- Java Lambda 表達式
- 語法
- Lambda 表達式實例
- Lambda表達式與函數(shù)式接口
- 方法引用
- 處理lambda表達式的接口
- Java Lambda 表達式
- 語法
- Lambda 表達式實例
- Lambda表達式與函數(shù)式接口
- 方法引用
- 處理lambda表達式的接口
Java Lambda 表達式
Lambda 表達式,也可稱為閉包.
Lambda 允許把函數(shù)作為一個方法的參數(shù)(函數(shù)作為參數(shù)傳遞進方法中)。
Lambda表達式的主要特點包括:
- 匿名性:Lambda表達式?jīng)]有顯式的名稱,因此可以被當(dāng)做一種匿名函數(shù)使用。
- 簡潔性:Lambda表達式可以大大減少代碼的冗余,使代碼更加簡潔。
- 傳遞性:Lambda表達式可以作為參數(shù)傳遞給方法,從而實現(xiàn)更靈活的代碼組織。
語法
lambda 表達式的語法格式如下:
(parameters) -> expression
或
(parameters) ->{ statements; }
以下是lambda表達式的重要特征:
- 可選類型聲明:不需要聲明參數(shù)類型,編譯器可以統(tǒng)一識別參數(shù)值。
- 可選的參數(shù)圓括號:一個參數(shù)無需定義圓括號,但多個參數(shù)需要定義圓括號。
- 可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
- 可選的返回關(guān)鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定表達式返回了一個數(shù)值。
使用 Lambda 表達式需要注意以下兩點:
-
Lambda 表達式主要用來定義行內(nèi)執(zhí)行的方法類型接口(例如,一個簡單方法接口)。在上面例子中,我們使用各種類型的 Lambda 表達式來定義 MathOperation 接口的方法,然后我們定義了 operation 的執(zhí)行。
-
Lambda 表達式免去了使用匿名方法的麻煩,并且給予 Java 簡單但是強大的函數(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)
Lambda表達式與函數(shù)式接口
Lambda表達式通常與函數(shù)式接口(Functional Interface)一起使用。函數(shù)式接口是一個只包含一個抽象方法的接口。Lambda表達式可以使用這個抽象方法的簽名來實現(xiàn)該接口,從而簡化代碼。
例如,Java標準庫中的java.lang.Runnable就是一個函數(shù)式接口,它只包含一個void run()方法。我們可以使用Lambda表達式來創(chuàng)建Runnable對象:
Arrays.sort(arrays,(first,second)->first.length()-second.length());
方法引用
方法引用:使用操作符::將方法名和對象或類的名字分隔開來,三種主要使用情況為:
- 對象::實例方法
- 類::靜態(tài)方法
- 類::實例方法
// 實例方法引用
list.forEach(e->{System.out.println(e);});
list.forEach(System.out::println);// 靜態(tài)方法
list.stream().reduce(Math::max);// 實例方法
people=stream.toArray(Person[]::new);
處理lambda表達式的接口
函數(shù)式接口 | 參數(shù)類型 | 返回類型 | 抽象方法名 | 描述 | 其他方法 |
---|---|---|---|---|---|
Runnable | 無 | void | run | 作為無參數(shù)或返回值的動作執(zhí)行 | |
Supplier<T> | 無 | T | get | 提供一個T類型的值 | |
Consumer<T> | T | void | accept | 處理一個T類型的值 | addThen |
BiConsumer<T,U> | T,U | void | accept | 處理T和U類型的值 | addThen |
Function<T,R> | T | R | apply | 有一個T類型參數(shù)的函數(shù) | compose,addThen,idenity |
BiFunction<T,U,R> | T,U | R | apply | 有T和U類型參數(shù)的函數(shù) | addThen |
UnaryOperator<T> | T | T | apply | 類型T上的一元操作符 | compose,addThen,identity |
BinaryOperator<T> | T,T | T | apply | 類型T上的二元操作符 | addThen,maxBy,minBy |
PreDicate<T> | T | boolean | test | 布爾值函數(shù) | add,or,negate,isEqual |
BiPredicate | T,U | boolean | test | 有兩個參數(shù)的布爾值函數(shù) | add,or,negate |
Java Lambda 表達式
Lambda 表達式,也可稱為閉包.
Lambda 允許把函數(shù)作為一個方法的參數(shù)(函數(shù)作為參數(shù)傳遞進方法中)。
Lambda表達式的主要特點包括:
- 匿名性:Lambda表達式?jīng)]有顯式的名稱,因此可以被當(dāng)做一種匿名函數(shù)使用。
- 簡潔性:Lambda表達式可以大大減少代碼的冗余,使代碼更加簡潔。
- 傳遞性:Lambda表達式可以作為參數(shù)傳遞給方法,從而實現(xiàn)更靈活的代碼組織。
語法
lambda 表達式的語法格式如下:
(parameters) -> expression
或
(parameters) ->{ statements; }
以下是lambda表達式的重要特征:
- 可選類型聲明:不需要聲明參數(shù)類型,編譯器可以統(tǒng)一識別參數(shù)值。
- 可選的參數(shù)圓括號:一個參數(shù)無需定義圓括號,但多個參數(shù)需要定義圓括號。
- 可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
- 可選的返回關(guān)鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定表達式返回了一個數(shù)值。
使用 Lambda 表達式需要注意以下兩點:
-
Lambda 表達式主要用來定義行內(nèi)執(zhí)行的方法類型接口(例如,一個簡單方法接口)。在上面例子中,我們使用各種類型的 Lambda 表達式來定義 MathOperation 接口的方法,然后我們定義了 operation 的執(zhí)行。
-
Lambda 表達式免去了使用匿名方法的麻煩,并且給予 Java 簡單但是強大的函數(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)
Lambda表達式與函數(shù)式接口
Lambda表達式通常與函數(shù)式接口(Functional Interface)一起使用。函數(shù)式接口是一個只包含一個抽象方法的接口。Lambda表達式可以使用這個抽象方法的簽名來實現(xiàn)該接口,從而簡化代碼。
例如,Java標準庫中的java.lang.Runnable就是一個函數(shù)式接口,它只包含一個void run()方法。我們可以使用Lambda表達式來創(chuàng)建Runnable對象:
Arrays.sort(arrays,(first,second)->first.length()-second.length());
方法引用
方法引用:使用操作符::將方法名和對象或類的名字分隔開來,三種主要使用情況為:
- 對象::實例方法
- 類::靜態(tài)方法
- 類::實例方法
// 實例方法引用
list.forEach(e->{System.out.println(e);});
list.forEach(System.out::println);// 靜態(tài)方法
list.stream().reduce(Math::max);// 實例方法
people=stream.toArray(Person[]::new);
處理lambda表達式的接口
函數(shù)式接口 | 參數(shù)類型 | 返回類型 | 抽象方法名 | 描述 | 其他方法 |
---|---|---|---|---|---|
Runnable | 無 | void | run | 作為無參數(shù)或返回值的動作執(zhí)行 | |
Supplier<T> | 無 | T | get | 提供一個T類型的值 | |
Consumer<T> | T | void | accept | 處理一個T類型的值 | addThen |
BiConsumer<T,U> | T,U | void | accept | 處理T和U類型的值 | addThen |
Function<T,R> | T | R | apply | 有一個T類型參數(shù)的函數(shù) | compose,addThen,idenity |
BiFunction<T,U,R> | T,U | R | apply | 有T和U類型參數(shù)的函數(shù) | addThen |
UnaryOperator<T> | T | T | apply | 類型T上的一元操作符 | compose,addThen,identity |
BinaryOperator<T> | T,T | T | apply | 類型T上的二元操作符 | addThen,maxBy,minBy |
PreDicate<T> | T | boolean | test | 布爾值函數(shù) | add,or,negate,isEqual |
BiPredicate | T,U | boolean | test | 有兩個參數(shù)的布爾值函數(shù) | add,or,negate |