最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java8 Lambda表達式詳解及實例

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

第一個Lambda表達式

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

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

上面的例子如果改成使用Lambda就會簡單許多:

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

Lambda表達式是一個匿名函數(shù),將行為像數(shù)據(jù)一樣傳遞,表達式使用 -> 將參數(shù)和主體分開, -> 前面是參數(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表達式使用 () 表示沒有參數(shù)。
  2. 如果Lambda表達式中只包含一個參數(shù),可省略掉 () 。
  3. 如果Lambda表達式的主題是一段代碼塊,需要使用 {} ,該代碼塊與普通的Java代碼塊并無區(qū)別,也可以返回或拋出異常。
  4. 如果參數(shù)的類型可以由編譯器推斷得出可以省略參數(shù)類型,當然你也可以加上。

以上就是Lambda表達式的所有形式了。

那么問題來了:

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

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

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

函數(shù)接口

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

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

新建一個我們自己的函數(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));

目標類型

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

final

       如果我們在匿名內(nèi)部類中引用了所在方法中的局部變量,這是需要局部變量是 final 的。

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

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

Lambda表達式引用的局部變量必須是final或即成事實的final。

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

類型推斷

Lambda表達式的類型推斷是Java7中就引入的目標類型推斷的擴展。

java7中的類型推斷:

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

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

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

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

相關(guān)文章

  • java 創(chuàng)建線程的四種方式

    java 創(chuàng)建線程的四種方式

    這篇文章主要介紹了java 創(chuàng)建線程的四種方式,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • Java利用OSHI實現(xiàn)獲取機器的硬件信息

    Java利用OSHI實現(xiàn)獲取機器的硬件信息

    OSHI(Operating System and Hardware Information)是一個開源的Java庫,用于獲取操作系統(tǒng)和硬件的詳細信息,下面我們就來看看他的具體使用吧
    2024-11-11
  • Java流程控制之選擇結(jié)構(gòu)

    Java流程控制之選擇結(jié)構(gòu)

    這篇文章主要介紹了Java流程控制之選擇結(jié)構(gòu),主要以if單選擇結(jié)構(gòu)、if雙選擇結(jié)構(gòu)、if多選擇結(jié)構(gòu)、嵌套的if結(jié)構(gòu)、switch多選擇結(jié)構(gòu)多種選擇結(jié)構(gòu)展開全文。需要的小伙伴可以參考一下
    2021-12-12
  • Java的System.getProperty()方法獲取大全

    Java的System.getProperty()方法獲取大全

    這篇文章主要介紹了Java的System.getProperty()方法獲取大全,羅列了System.getProperty()方法獲取各類信息的用法,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • 使用自定義注解實現(xiàn)加解密及脫敏方式

    使用自定義注解實現(xiàn)加解密及脫敏方式

    這篇文章主要介紹了使用自定義注解實現(xiàn)加解密及脫敏方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring實現(xiàn)一個簡單的SpringIOC容器

    Spring實現(xiàn)一個簡單的SpringIOC容器

    本篇文章主要介紹了Spring實現(xiàn)一個簡單的SpringIOC容器,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • Java對象池pool2分析PooledObjectFactory過程

    Java對象池pool2分析PooledObjectFactory過程

    文章介紹了Java中對象池化技術(shù)的背景,以Apache的Pool2庫為例,詳細講解了GenericObjectPool的構(gòu)造函數(shù)參數(shù)和PooledObjectFactory接口的實現(xiàn),通過商場里的共享充電寶的比喻,說明了池化思維的應(yīng)用
    2025-02-02
  • 淺談Java線程間通信之wait/notify

    淺談Java線程間通信之wait/notify

    下面小編就為大家?guī)硪黄獪\談Java線程間通信之wait/notify。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • IDEA去除掉代碼中虛線、波浪線和下劃線實線的方法

    IDEA去除掉代碼中虛線、波浪線和下劃線實線的方法

    初次安裝使用IDEA,總是能看到導(dǎo)入代碼后,出現(xiàn)很多的波浪線,下劃線和虛線,這是IDEA給我們的一些提示和警告,但是有時候我們并不需要,反而會讓人看著很不爽,這里簡單記錄一下自己的調(diào)整方法,供其他的小伙伴在使用的時候參考
    2024-09-09
  • JavaWeb ServletConfig作用及原理分析講解

    JavaWeb ServletConfig作用及原理分析講解

    ServletConfig對象,叫Servlet配置對象。主要用于加載配置文件的初始化參數(shù)。我們知道一個Web應(yīng)用里面可以有多個servlet,如果現(xiàn)在有一份數(shù)據(jù)需要傳給所有的servlet使用,那么我們就可以使用ServletContext對象了
    2022-10-10

最新評論

台东县| 申扎县| 龙江县| 江华| 陈巴尔虎旗| 寿宁县| 景东| 明水县| 合山市| 涞水县| 迭部县| 余姚市| 虞城县| 江西省| 邯郸市| 瑞安市| 白城市| 屏山县| 富民县| 无棣县| 垫江县| 济源市| 含山县| 临安市| 库尔勒市| 东宁县| 白河县| 永州市| 临颍县| 隆尧县| 石首市| 宣化县| 祁阳县| 石嘴山市| 自贡市| 平顺县| 霞浦县| 高雄市| 蒙城县| 中牟县| 武宣县|