大家都在說的「Lambda 表達式」到底是什麼?

2021-01-11 碼不停

花10分鐘認真的看完一篇文章,或許會有意想不到的收穫!

自從java8中引入了Lambda表達式之後,使用的人也越來越多了,這篇文章我們就來看看什麼是Lambda表達式。

廢話少說,先看定義!

01定義

Lambda表達式也被稱為箭頭函數,匿名函數,閉包Lambda表達式體現的是輕量級函數式編程思想『->』符號式Lambda表達式核心操作符號,符號左側是操作參數,符號右側是操作表達式

1、在定義中有一個比較重要的詞就是「函數式編程」現在「函數式編程」越來越受到關注了,有興趣的小夥伴可以了解一下,java8引入Lambda表達式就是為了更好的支持函數式編程。

2、簡單了解一下lambda的語法格式

(參數) ->{語句; }

上面就是lambda的語法格式,「->」是它的一個標誌,當你看到「->」你就知道這裡使用了Lambda表達式。

3、再來看一下Lambda的特徵

可選類型聲明:不需要聲明參數類型,編譯器可以統一識別參數值。可選的參數圓括號:一個參數無需定義圓括號,但多個參數需要定義圓括號。可選的大括號:如果主體包含了一個語句,就不需要使用大括號。可選的返回關鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定明表達式返回了一個數值。

說了這麼多定義,您不禁要問一句了:java8為什麼要引入lambda表達式呀?

02為什麼引入Lambda?

在Java8出現之前,如果你想傳遞一段代碼到另一個方法裡是很不方便的。你幾乎不可能將代碼塊到處傳遞,因為Java是一個面向對象的語言,因此你要構建一個屬於某個類的對象,由它的某個方法來放置你想傳遞的代碼塊。

面向對象編程確實容易理解,可是每次進行操作都需要創建一個對象,就很麻煩,所以java中用了匿名函數來解決這個問題,使用匿名函數可以實現傳遞一段代碼。但是這種方式和Lambda表達式比較起來還是顯得很繁瑣。

03舉例子

1、用匿名函數的方式,實現一個線程

可以看到,用匿名函數的方式,我們似乎把run方法的代碼進行了傳遞。我們再來看下Runnable接口的源碼

可以發現,Runnable接口中只有一個run方法

那麼就是說,我在Thread中使用了Runnable這個匿名函數,一定是,並且只能是,實現run方法(這句話可能有些繞口,但是很重要哦!)

既然只能一定是實現run方法,那麼匿名函數中真正有用的代碼其實就是畫紅色的這一句。

2、Lambda進行代碼簡化

那既然只有那一行代碼是真正有用的,我為何不只寫那一行呢?

使用了Lambda表達式之後瞬間省了很多代碼,結合我們上面Lambda的語法定義就能看懂這個表達式。

()->{ System.out.println("線程"); }

左邊是參數,因為Runable的run方法無入參,所以也不用寫。

右邊是方法的實現,因為只有一個run方法,裡面寫的就是對run方法的實現。

04總結

看完上面的例子,其實小夥伴們就能看出來。Lambda表達式針對的其實就是「只有一個抽象方法的接口」。就像Runnable接口這樣的。java8中給這樣的接口起了個名字,叫「函數式接口」。

當要實現「函數式接口」時,你就可以使用Lambda表達式,表達式左邊是接口中抽象方法的入參,右邊就是抽象方法的具體實現。當然也可以自定義「函數式接口」。

關注我--我們一起進步

相關焦點

  • Java8 lambda表達式語法
    文中如有錯誤和理解偏差的地方,希望大家幫忙指出,我會持續修改和優化。本文是該系列的第一篇,主要介紹Java8對屌絲碼農最有吸引力的一個特性—lambda表達式。java8的安裝工欲善其器必先利其器,首先安裝JDK8。過程省略,大家應該都可以自己搞定。
  • Java8 lambda表達式
    編寫第一個lambda表達式swing是一個平臺無關的gui庫,在該庫中,有很多常見的習慣,比如為了知道用戶點點擊了什麼,註冊一個事件監聽器,這個事件監聽器可以執行一些操作響應用戶的輸入。②展示了只有一個參數的lambda的表達式。不同於只包含一條表達式的lambda。
  • Python中的Lambda表達式
    Lambda表達式當我們需要做一些簡單的事情並且更希望快速完成工作而不是正式命名函數時,Lambda表達式是理想的選擇。Lambda表達式也稱為匿名函數。Python中的Lambda表達式是聲明小型匿名函數的一種簡短方式(沒有必要為Lambda函數提供名稱)。
  • Python匿名函數:Lambda表達式
    我們以一張圖形進入主題:從圖中我們可以看出lambda表達式幾點特徵:簡潔性,符合了Python的一貫宗旨;起到了函數的作用,但未顯示函數名稱,這就是匿名函數;接著我們嘗試用lambda表達式來實現上述函數功能:# labmda表達式psum = lambda a,b,c:a + b + cprint(psum) # 驗證是否生成一個新對象
  • Python每天一分鐘:lambda表達式 (匿名函數)及用法詳解
    lambda表達式介紹python中有一種靈活,便捷的且具有函數功能的表達式:lambda表達式!python lambda表達式如果說函數是命名的、便於復用的代碼塊,那麼lambda 表達式則是功能更靈活的代碼塊
  • Lambda表達式在Python事件中的運用
    本篇筆記內容:Lambda表達式詳解Lambda表達式在事件中的應用【1】Lambda表達式詳解lambda 表達式定義的是一個匿名函數,只適合簡單輸入參數,簡單計算返回結果,不適合功能複雜情況。lambda 定義的匿名函數也有輸入、也有輸出,只是沒有名字。語法格式如下:lambda 參數值列表:表達式其中,參數值列表即為輸入,表達式計算的結構即為輸出。看一個案例:求三個數的和。
  • 「數據清洗」lambda表達式配合使用的四種函數
    標籤:數據清洗、pythonlambda表達式配合使用的四種函數一、什麼是lambda表達式基本特性使用方法filter函數map函數sorted函數reduce函數總結什麼是lambda表達式>lambda 表達式是一個匿名函數,lambda表達式基於數學中的λ演算得名,直接對應於其中的lambda抽象,是一個匿名函數,即沒有函數名的函數。
  • Python學習第40課-Lambda表達式創建匿名函數
    之前我們學習了使用def關鍵字來創建自定義函數,這種方式創建的函數都是有函數名的,我們也可以創建沒有函數名的函數,這種函數叫做匿名函數。Python中可以使用Lambda表達式來創建匿名函數。lambda表達式用來創建匿名函數,那麼我們也可以把lambda表達式叫做lambda函數。
  • CSharp 基礎知識系列- 6 Lambda表達式和Linq簡單介紹
    前言C#的lambda和Linq可以說是一大亮點,C#的Lambda無處不在,Linq在數據查詢上也有著舉足輕重的地位。那麼什麼是Linq呢,Linq是Language Intergrated Query(語言集成查詢)的縮寫,可以對本地對象集合或者遠程數據源進行結構化的查詢操作。那什麼又是Lambda呢?
  • Java中Lambda表達式的5種不同語法
    表達式的標準語法包括以下內容:1.主體,由單個表達式或語句塊組成。這使代碼更整潔,更像真正的lambda表達式。3. Lambda表達式中的多行代碼如果代碼不能一行編寫,則可以將其括在{}中。現在,該代碼應明確包含return語句。
  • 三種基本用法、五種應用場景,理清C++11新特性:Lambda表達式
    lambda表達式是指能夠捕獲作用域中的變量的無名函數對象,狹義的理解,就是匿名函數。無論是在項目中,還是在開源網站,總是能夠看到lambda的身影。為了能夠輕鬆閱讀代碼,進而熟練地使用,本文首先將講解lambda表達式的基本語法、三種基本用法,然後介紹五種實際的應用場景,最有總結說明lambda表達式的作用。
  • Python面試題推薦:什麼是lambda函數?
    陝西優就業小編今天送上一盤Python面試題,大家來學習下吧!別忘了自己整理相關Python知識,祝大家面試順利!Python允許你定義一種單行的小函數。定義lambda函數的形式如下:labmda 參數:表達式lambda函數默認返回表達式的值。你也可以將其賦值給一個變量。
  • lambda匿名函數都自嘆不如
    其中,一行代碼編寫與lambda表達式是最具代表性的方法,下面分別來介紹一行代碼編寫和lambda表達式的代碼之美。一行代碼我們都知道,創建列表的方式有多種,比如直接定義、使用list()函數轉換、使用for循環迭代輸出等等。
  • python入門基礎之lambda匿名函數詳解
    一個完整的 lambda"語句"代表了一個表達式,這個表達式的定義體必須和聲明放在同一行。,參數都是可選,也都會返回對象如下:不同之處:lambda可以定義一個匿名函數,而def定義的函數必須有一個名字。
  • Python小白學習記錄-匿名函數lambda
    匿名函數就是不需要通過def定義及顯示地指定函數名的函數匿名函數的特性(1)匿名函數只能有一個表達式,不用寫return,返回值就是該表達式的結果。lambda表示這是一個匿名函數>(2)匿名函數已reduce函數結合隊列中數值相乘(3)匿名函數與filter過濾器的結合,lambda
  • Java Lambda表達式的3種簡寫方式
    使用 Lambda 表達式是為了簡化程序代碼,Lambda 表達式本身也提供了多種簡化形式,這些簡化形式雖然簡化了代碼,但客觀上使得代碼可讀性變差
  • 大家都在說的天文臺認證到底是什麼?
    表友@vinco:大家都在說的天文臺認證到底是什麼?要很貴嗎?在大家的印象裡,被它認證過的表,似乎都能秒變鐘錶界的高富帥!那它到底是一個什麼樣的存在呢?今天小萬就帶大家一起去揭開這個謎團。它和氣象天文臺有著很深的歷史淵源?然而事實是,這二者並沒有太大關係。瑞士天文臺認證是由瑞士官方天文臺測試組織(簡稱C.O.S.C.)針對手錶準確性做的鑑定,合格的手錶往往被稱為Chronometer—天文臺表。
  • Python中函數的定義、傳參和lambda函數是什麼?他們有什麼用?
    今天我們來學習函數的定義、傳參和lambda函數。開發工具:IDLE (Python 3.7 64-bit或者32-bit) (註:不需要3.7版本的也行,只需要Python3的版本都可以,在語法方面沒有什麼不同。)
  • 貫穿C++ 11 與 C++ 17 的 Lambda 到底是個什麼?
    但是仍然有一些不為人知的事情(如LIFE-立即調用的函數表達式,Lambda的類型等等)鮮有人談論。因此,在這篇文章裡,我不僅要向你展示C++中的Lambda函數,同時還要介紹它的內部工作機制,以及Lambda函數的其他方方面面。這篇文章的標題有點誤導人。因為Lambda並不總是轉化為函數指針。實際上它是一個表達式(確切地說是唯一的閉包)。
  • 正則表達式和 CPU 100%有什麼故事?
    我們可以看到所有的堆棧都指向了一個名為 validateUrl 的方法,這樣的報錯信息在堆棧中一共超過 100 處。通過排查代碼,我們知道這個方法的主要功能是校驗 URL 是否合法。很奇怪,一個正則表達式怎麼會導致 CPU 利用率居高不下。為了弄清楚復現問題,我們將其中的關鍵代碼摘抄出來,做了個簡單的單元測試。