自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Lambda用在哪里?幾種場景?

開發(fā) 前端
其實上面的就知道lambda用在哪的,就是配合函數(shù)式接口使用的。lambda表達式必須和函數(shù)式接口的抽象函數(shù)描述一樣的參數(shù)類型,它的返回類型也必須和抽象函數(shù)的返回類型兼容,并且他能拋出的異常也僅限于在函數(shù)的描述范圍中。

[[334826]]

 目錄

  1. 前言
  2. Lambda表達式語法
  3. 案例
  4. 幾種場景
  5. 口訣
  6. 函數(shù)式接口
  7. Lambda用在哪里
  8. 總結

Lambda表達式語法

Lambda的語法極為簡單,類似如下結構:

  1. (parameters) -> expression 

  1. (parameters) -> { statements; } 

Lambda表達式由三部分組成:

1、paramaters:類似方法中的形參列表,這里的參數(shù)是函數(shù)式接口里的參數(shù)。這里的參數(shù)類型可以明確的聲明也可不聲明而由JVM隱含的推斷,另外當只有一個推斷類型時可以省略掉圓括號。

2、->:可理解為“被用于”的意思

3、方法體:可以是表達式也可以代碼塊,是函數(shù)式接口里方法的實現(xiàn)。代碼塊可返回一個值或者什么都不返回,這里的代碼塊塊等同于方法的方法體。如果是表達式,也可以返回一個值或者什么都不反回。

案例

Lambda表達式本質上是一個匿名方法,如

  1. public int add(int x,int y){ 
  2.     return x + y; 
  3. }  

用Lambda表達式可以寫成

  1. (int x,int y) -> {return x + y;} 

左側即是函數(shù)方法的參數(shù),右側就是實現(xiàn)主體。

可以更簡潔一點,就是參數(shù)類型可以不寫,java會根據(jù)上下文推斷出來

  1. (x, y) -> {return x + y;} 

如果實現(xiàn)主體為一條語句,return也可以省掉,花括號也省掉。

  1. (x, y) -> x + y; 

幾種場景

接口的抽象方法有幾種場景,我們來看一下

1、無參數(shù)、無返回值

  1. public void print(){ 
  2.     System.out.println("Hello Lambda!"); 
  3. }  

Lambda表達式寫法

  1. () -> System.out.println("Hello Lambda!"); 

典型就是Runnable中的run方法

  1. public interface Runnable { 
  2.  public abstract void run(); 

之前的寫法

Lambda的寫法

  1. Runnable r1 = () -> System.out.println("Hello Lambda!"); 
  2. r1.run(); 

2、1個參數(shù),無返回值

  1. public void print(String str){ 
  2.     System.out.println("Hello " + str); 
  3. }  

Lambda的寫法

  1. (str) -> System.out.println("Hello " + str); 

如果是1個參數(shù),可以去掉小括號

  1. str -> System.out.println("Hello " + str); 

3、多個參數(shù)、有返回值,且多條語句

  1. public int add(int x,int y){ 
  2.     System.out.println("執(zhí)行加法運算!"); 
  3.  return x+y; 
  4. }  

Lambda的寫法

  1. (x,y) -> { 
  2.  System.out.println("執(zhí)行加法運算!"); 
  3.  return x+y; 

此處因為是多條語句,所以一定要用花括號。

4、多個參數(shù),有返回值,且一條語句,省掉花括號以及return

  1. public int add(int x,int y){ 
  2.     return x + y; 
  3. }  

用Lambda表達式可以寫成

  1. (x, y) -> x + y; 

口訣

上聯(lián): 左右遇一括號省

左側是1個參數(shù),可以省掉括號;右側是一條語句可以省掉花括號

下聯(lián):左側推斷類型省

左側的參數(shù)類型可以省掉,有JAVA根據(jù)上下文推斷

橫批:能省則省

能夠省掉盡量省掉,使得代碼簡潔

函數(shù)式接口

我們來看看什么是函數(shù)式接口:

若接口中只有一個抽象方法的接口稱為函數(shù)式接口

可以使用注解@FunctionlInterface來標識,可以檢查是否是函數(shù)式接口

我們來定義一個運算接口

  1. @FunctionalInterface //函數(shù)式接口聲明 
  2. public interface MyFunction { 
  3.  public Integer getValue(Integer num); 

注意必須只有一個抽象方法需要實現(xiàn)

通用函數(shù)實現(xiàn)

  1. public Integer operation(Integer num,MyFunction mf){ 
  2.  return mf.getValue(num); 

測試

Lambda用在哪里

其實上面的就知道lambda用在哪的,就是配合函數(shù)式接口使用的。lambda表達式必須和函數(shù)式接口的抽象函數(shù)描述一樣的參數(shù)類型,它的返回類型也必須和抽象函數(shù)的返回類型兼容,并且他能拋出的異常也僅限于在函數(shù)的描述范圍中。

自定義一個函數(shù)接口,F(xiàn)為參數(shù),T為返回值

  1. @FunctionalInterface 
  2. interface Converter<F, T>{ 
  3.  T convert(F from); 

傳統(tǒng)匿名類方式

一定要觀察好上面的參數(shù)類型和返回類型,因為定義的時候采用的是范型。

Lambda表達式方式

上面的兩種實現(xiàn)都是等價的。我們在來看看常用的線程例子

感覺代碼還是比較多,用Lambda來寫

new Thread(() -> System.out.println("hello lambda")).start();

非常簡潔是吧。這個就是Lambda的優(yōu)美的體現(xiàn)

總結

看到這里小伙伴們是不是感覺Lambda表達式的好處了,當然我們要經常寫,才能熟練掌握。lambda還有一些高級用法,老顧下次再繼續(xù)跟小伙伴們介紹。

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2013-05-23 14:20:50

PoE以太網IP終端地址

2018-04-26 11:10:56

OLTP列式存儲

2009-06-23 09:07:38

2022-03-23 09:52:28

LambdaAWS服務

2022-04-18 10:49:14

開源產品組合架構

2011-11-08 10:15:47

Scala

2015-08-05 10:54:49

2022-07-01 21:13:46

NFT加密SuperRare

2017-09-18 14:56:27

VMwarePhoton平臺

2012-11-08 14:25:03

Office 2013

2021-02-01 10:46:32

多云云安全云計算

2018-11-26 15:04:49

SDN網絡數(shù)據(jù)中心

2020-09-27 16:15:42

新基建5G人工智能

2021-01-25 14:39:19

新基建

2022-03-29 14:46:03

元宇宙工業(yè)元宇宙物聯(lián)網

2020-12-14 18:02:25

區(qū)塊鏈人民幣技術

2014-01-07 13:54:40

Hadoop日志

2015-07-03 11:19:43

火車WiFi

2011-10-18 16:33:44

平板市場Android
點贊
收藏

51CTO技術棧公眾號