最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

java8特性之lambda表達式

2021-05-05 03:15 作者:童年影視驛站  | 我要投稿
  • lambda表達式含義

  • 函數(shù)式接口

    • 1.什么是函數(shù)式接口

    • 2.自定義函數(shù)

    • 3.作為參數(shù)傳遞Lambda表達式

    • 4.四大內置核心函數(shù)式接口

  • 方法引用與構造器引用

    • 方法引用

    • 構造器引用(了解)

    • 數(shù)組引用(了解)


lambda表達式含義

lambda表達式是對某些接口的簡單實現(xiàn),Lambda 規(guī)定接口中只能有一個需要被實現(xiàn)的方法,不是規(guī)定接口中只能有一個方法,這就是函數(shù)式接口。** lambda表達式引入“->” 左側代表參數(shù)列表,右側代表需要的功能,邏輯

函數(shù)式接口

圖片

1.什么是函數(shù)式接口

(1)、只包含一個抽象方法的接口,稱為函數(shù)式接口。(2)、你可以通過Lambda表達式來創(chuàng)建該接口的對象。(若Lambda表達式拋出一個受檢異常,那么該異常需要在目標接口的抽象方法上進行聲明)。(3)、我們可以在任意函數(shù)式接口上使用@FunctionalInterface注解,這樣做可以檢查它是否是一個函數(shù)式接口,同時javadoc也會包含一條聲明,說明這個接口是一個函數(shù)式接口。

2.自定義函數(shù)

示例代碼一:

示例代碼二:函數(shù)式接口中使用泛型

3.作為參數(shù)傳遞Lambda表達式

示例代碼:

作為參數(shù)傳遞Lambda表達式:為了將Lambda表達式作為參數(shù)傳遞,接收Lambda表達式的參數(shù)類型必須是與該Lambda表達式兼容的函數(shù)式接口的類型。**

4.四大內置核心函數(shù)式接口

圖片

一、Consumer:消費型接口(void accept(T t))

consumer 接口翻譯過來就是消費者,顧名思義,該接口對應的方法類型為接收一個參數(shù),沒有返回值,可以通俗的理解成將這個參數(shù)'消費掉了',一般來說使用Consumer接口往往伴隨著一些期望狀態(tài)的改變或者事件的發(fā)生,例如最典型的forEach就是使用的Consumer接口,雖然沒有任何的返回值,但是卻向控制臺輸出了語句。Consumer 使用accept對參數(shù)執(zhí)行行為

以上為消費型接口,有參數(shù),無返回值類型的接口。

二、Supplier:供給型接口(T get())

Supplier 接口翻譯過來就是提供者,和上面的消費者相反,該接口對應的方法類型為不接受參數(shù),但是提供一個返回值,通俗的理解為這種接口是無私的奉獻者,不僅不要參數(shù),還返回一個值,使用get()方法獲得這個返回值

上面就是一個供給類型的接口,只有產出,沒人輸入,就是只有返回值,沒有入?yún)?/p>

三、Function<T, R>:函數(shù)型接口(R apply(T t))

function,顧名思義,函數(shù)的意思,這里的函數(shù)是指數(shù)學上的函數(shù)哦,你也可以說是嚴格函數(shù)語言中的函數(shù),例如haskell里的,他接受一個參數(shù),返回一個值,永遠都是這樣,是一個恒定的,狀態(tài)不可改變的方法。其實想講函數(shù)這個將徹底明白可以再開一篇博客了,所以這里不詳細的說了。?? 上面說到,函數(shù)接口是對行為的抽象,因此我方便大家理解,就用java中的方法作例子。

上面就是一個函數(shù)型接口,輸入一個類型得參數(shù),輸出一個類型得參數(shù),當然兩種類型可以一致。

四、Predicate:斷言型接口(boolean test(T t))

predicate<T,Boolean> 謂語接口,顧名思義,中文中的‘是’與‘不是’是中文語法的謂語,同樣的該接口對應的方法為接收一個參數(shù),返回一個Boolean類型值,多用于判斷與過濾,當然你可以把他理解成特殊的Funcation<T,R>,但是為了便于區(qū)分語義,還是單獨的劃了一個接口,使用test()方法執(zhí)行這段行為

上面就是一個斷言型接口,輸入一個參數(shù),輸出一個boolean類型的返回值。

總結

四大函數(shù)接口和他們引申出的各類接口,重點是對不同種類行為的封裝導致了設計出不同的函數(shù)接口,另外在使用函數(shù)接口或者lambda表達式的時候,要注意lambda對值封閉這個特性。

方法引用與構造器引用

方法引用

當要傳遞給Lambda體的操作,已經有實現(xiàn)的方法,就可以使用方法引用!實現(xiàn)抽象方法的參數(shù)列表,必須與方法引用方法的參數(shù)列表保持一致 方法引用使用操作符“::”將方法名和對象或者類的名字分隔開來。三種使用情況:對象::實例方法類::靜態(tài)方法類::實例方法

例如

BinaryOperator bo=(x,y)->Math.pow(x,y)

等同于:

BinaryOperator<Double> bo=Math::pow;

構造器引用(了解)

格式:ClassName::new與函數(shù)式接口相結合,自動與函數(shù)式接口中方法兼容??梢园褬嬙炱饕觅x值給定義的方法,與構造器參數(shù)列表要與接口中抽象方法的參數(shù)列表一直 例如:

Function<Integer,MyClass> fun=(n)->new MyClass(n);

等同于:

Function<Integer,MyClass> fun=MyClass::new;

數(shù)組引用(了解)

格式:type[]::new例如:

Function<Integer,Integer[]> fun=(n)->new Integer[n];

等同于:

Function<Integer,Integer[]> fun=Integer[]::new;

歡迎關注公眾號【ggball blog】!

- END -


本文使用?文章同步助手?同步



java8特性之lambda表達式的評論 (共 條)

分享到微博請遵守國家法律
绩溪县| 颍上县| 阿坝县| 巴彦淖尔市| 庐江县| 廉江市| 杨浦区| 洪洞县| 望城县| 会泽县| 宣威市| 福州市| 华宁县| 阳高县| 连江县| 玉山县| 宿迁市| 西宁市| 松潘县| 竹北市| 南安市| 汨罗市| 高邑县| 行唐县| 黄冈市| 安吉县| 沅江市| 城固县| 元江| 剑川县| 仪征市| 陆良县| 青海省| 岳池县| 彰武县| 曲阜市| 介休市| 永吉县| 丰原市| 濉溪县| 淅川县|