欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java8 Lambda表達(dá)式詳解及實(shí)例

 更新時(shí)間:2016年09月26日 10:35:22   投稿:lqh  
這篇文章主要介紹了Java8 Lambda表達(dá)式詳解的相關(guān)資料,需要的朋友可以參考下

第一個(gè)Lambda表達(dá)式

在Lambda出現(xiàn)之前,如果我們需要寫一個(gè)多線程可能需要下面這種方式:

Runnable runnable = new Runnable() {
      @Override
      public void run() {
        System.out.println("Hello runnable");
      }
    };
    ...
 thread.start();

上面的例子如果改成使用Lambda就會(huì)簡(jiǎn)單許多:

Runnable noArgs = ()->System.out.println("Hello Lambda!~");
...
 thread.start();

Lambda表達(dá)式是一個(gè)匿名函數(shù),將行為像數(shù)據(jù)一樣傳遞,表達(dá)式使用 -> 將參數(shù)和主體分開(kāi), -> 前面是參數(shù)部分,后面這是主體部分。

Lambda的其它形式

BinaryOperator<Long> add = (x,y)->x+y;
 //OR
 BinaryOperator<Long> add = (Long x,Long y)->x+y;
 //OR
 BinaryOperator<Long> add = (Long x,Long y)->{
  x+y;
 };
  1. Lambda表達(dá)式使用 () 表示沒(méi)有參數(shù)。
  2. 如果Lambda表達(dá)式中只包含一個(gè)參數(shù),可省略掉 () 。
  3. 如果Lambda表達(dá)式的主題是一段代碼塊,需要使用 {} ,該代碼塊與普通的Java代碼塊并無(wú)區(qū)別,也可以返回或拋出異常。
  4. 如果參數(shù)的類型可以由編譯器推斷得出可以省略參數(shù)類型,當(dāng)然你也可以加上。

以上就是Lambda表達(dá)式的所有形式了。

那么問(wèn)題來(lái)了:

BinaryOperator<Long> add = (Long x,Long y)->x+y; 是個(gè)什么意思?

這行代碼并不是講個(gè)數(shù)字相加,而是創(chuàng)建了一個(gè)函數(shù),用來(lái)計(jì)算兩個(gè)數(shù)字相加的結(jié)果。而add的類型是 BinaryOperator<Long> ,它也不是兩個(gè)數(shù)字的和,而是將兩個(gè)數(shù)字相加的那段代碼。下面的例子展示如何使用這個(gè)變量:

BinaryOperator<Long> add = (Long x,Long y)->x+y;
 Long res = add.apply(3L, 4L);
 System.out.println("res="+res);//輸出:res=7

函數(shù)接口

函數(shù)接口是只有一個(gè)抽象方法的接口,用作Lambda表達(dá)式的類型。

如 Runnable 就是一個(gè)函數(shù)接口。

新建一個(gè)我們自己的函數(shù)接口:

public interface AddOperator<T,D> {
  long add(T one,D two);
}

使用:

AddOperator<Long,Long> addOperator = ( x, y)->x +y;
 System.err.println("Custom function listener res= "+addOperator.add(34L, 65L));

目標(biāo)類型

目標(biāo)類型是指Lambda表達(dá)式所在上下文環(huán)境的類型。比如,將Lambda表達(dá)式賦值給一個(gè)局部變量,或傳遞給一個(gè)方法作為參數(shù),局部變量或方法參數(shù)的類型就是Lambda表達(dá)式的目標(biāo)類型。

final

       如果我們?cè)谀涿麅?nèi)部類中引用了所在方法中的局部變量,這是需要局部變量是 final 的。

在Lambda中我們不需要將引用的外部局部變量聲明為 final 的,但是該變量只能被賦值一次。

下面的例子中如果我們?nèi)サ糇⑨專瑢?duì)name再次賦值,則無(wú)法通過(guò)編譯,并顯示出錯(cuò)信息: local variables referenced from a Lambda expression must be final or effectively final.

Lambda表達(dá)式引用的局部變量必須是final或即成事實(shí)的final。

String name = getUserName();
//name="hi";
button.addActionListener(event->System.out.println("name="+name));

類型推斷

Lambda表達(dá)式的類型推斷是Java7中就引入的目標(biāo)類型推斷的擴(kuò)展。

java7中的類型推斷:

List<String> list= new ArrayList<>();

上例中我們并沒(méi)有指定ArrayList的范型類型,而是根據(jù)list的類型,推斷出了ArrayList的范性類型。

如: AddOperator<Long,Long> addOperator = ( x, y)->x +y;

通過(guò)此文,希望能幫助到大家,學(xué)習(xí)理解,此部分知識(shí),謝謝大家對(duì)本站的支持! 

相關(guān)文章

  • 一文詳解gRPC快速整合SpringCloud

    一文詳解gRPC快速整合SpringCloud

    這篇文章主要為大家介紹gRPC快速整合SpringCloud的實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • IDEA?+?Maven環(huán)境下的SSM框架整合及搭建過(guò)程

    IDEA?+?Maven環(huán)境下的SSM框架整合及搭建過(guò)程

    這篇文章主要介紹了IDEA?+?Maven環(huán)境下的SSM框架整合及搭建過(guò)程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Java避免UTF-8的csv文件打開(kāi)中文出現(xiàn)亂碼的方法

    Java避免UTF-8的csv文件打開(kāi)中文出現(xiàn)亂碼的方法

    這篇文章主要介紹了Java避免UTF-8的csv文件打開(kāi)中文出現(xiàn)亂碼的方法,結(jié)合實(shí)例形式分析了java操作csv文件時(shí)使用utf-16le編碼與utf8編碼相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • Java進(jìn)程間通信之消息隊(duì)列

    Java進(jìn)程間通信之消息隊(duì)列

    這篇文章主要為大家詳細(xì)介紹了Java進(jìn)程間通信之消息隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 記一次集成swagger2(Knife4j)在線文檔提示:Knude4j文檔請(qǐng)求異常的解決辦法

    記一次集成swagger2(Knife4j)在線文檔提示:Knude4j文檔請(qǐng)求異常的解決辦法

    Knife4j是一個(gè)集Swagger2 和 OpenAPI3為一體的增強(qiáng)解決方案,下面這篇文章主要給大家介紹了關(guān)于一次集成swagger2(Knife4j)在線文檔提示:Knude4j文檔請(qǐng)求異常的解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • java編寫屬于自己的線程池

    java編寫屬于自己的線程池

    這篇文章主要為大家詳細(xì)介紹了java編寫屬于自己的線程池,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java中IO流 RandomAccessFile類實(shí)例詳解

    Java中IO流 RandomAccessFile類實(shí)例詳解

    這篇文章主要介紹了Java中IO流 RandomAccessFile類實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 基于java.lang.IllegalArgumentException異常報(bào)錯(cuò)問(wèn)題及解決

    基于java.lang.IllegalArgumentException異常報(bào)錯(cuò)問(wèn)題及解決

    這篇文章主要介紹了基于java.lang.IllegalArgumentException異常報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java解析照片拿到GPS位置數(shù)據(jù)的詳細(xì)步驟

    Java解析照片拿到GPS位置數(shù)據(jù)的詳細(xì)步驟

    這篇文章主要介紹了Java解析照片拿到GPS位置數(shù)據(jù),本文給大家介紹代碼環(huán)境及核心代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Java使用jmeter進(jìn)行壓力測(cè)試

    Java使用jmeter進(jìn)行壓力測(cè)試

    本篇文章簡(jiǎn)單講一下使用jmeter進(jìn)行壓力測(cè)試。其壓測(cè)思想就是 通過(guò)創(chuàng)建指定數(shù)量的線程,同時(shí)請(qǐng)求指定接口,來(lái)模擬指定數(shù)量用戶同時(shí)進(jìn)行某個(gè)操作的場(chǎng)景,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評(píng)論