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

Java8學(xué)習(xí)教程之lambda表達(dá)式語法介紹

 更新時間:2017年09月18日 10:41:24   投稿:daisy  
眾所周知lambda表達(dá)式是JAVA8中提供的一種新的特性,它支持Java也能進(jìn)行簡單的“函數(shù)式編程”。 下面這篇文章主要給大家介紹了關(guān)于Java8學(xué)習(xí)教程之lambda表達(dá)式語法的相關(guān)資料,需要的朋友可以參考下。

前言

相信大家都知道,在Java8 中引入了 lambda 表達(dá)式,從行為參數(shù)化的角度,在使用時,將行為作為參數(shù),去除包圍在外層的不必要的類聲明,使代碼更加簡潔。

lambda 表達(dá)式的語法

lambda 表達(dá)式由參數(shù),->,以及函數(shù)體三部分組成。其實(shí)函數(shù)體可以是表達(dá)式,也可以是語句。語句應(yīng)該包含在{} 里,而表達(dá)式不能。

lambda 表達(dá)式舉例

(List<String> list) -> list.isEmpty() // 布爾類型表達(dá)式
() -> new Apple(10) // 創(chuàng)建一個新對象
(Apple a) -> { System.out.println(a.getWeight()); } // 使用一個對象的屬性
(String s) -> s.length() // 選擇或提取一個對象的屬性
(int a, int b) -> a * b // 組合兩個參數(shù)
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()) // 比較兩個對象

行為參數(shù)化

可以看到,lambda 表達(dá)式著重表達(dá)了行為。其實(shí)在 java8 之前,就已經(jīng)有類似將行為作為參數(shù)進(jìn)行處理的例子:

// java.util.Comparator
public interface Comparator<T> {
 public int compare(T o1, T o2);
}
inventory.sort(new Comparator<Apple>() {
 public int compare(Apple a1, Apple a2){
 return a1.getWeight().compareTo(a2.getWeight());
 }
});

在上面的例子中,定義了一個 Comparator 接口,并且定義了 compare 方法。List 類型的 inventory,定義了 sort 方法,該方法以 Comparator 作為參數(shù)。在使用時,生成一個匿名或不匿名的 Comparator 對象,該對象實(shí)現(xiàn)了 compare 方法,指定了具體的比較行為,再將 Comparator 對象作為參數(shù),傳給 sort 方法。實(shí)際上的作用,就是將比較行為,作為參數(shù),傳給 sort 方法,這種思想和做法就叫作“行為參數(shù)化”。一個使用的方法(比如 sort 方法)可以對應(yīng)多種行為,當(dāng)需要更改行為時,只需要修改表示行為的代碼,使用方不必做出修改,增加了代碼的健壯性。

匿名內(nèi)部類

而像上面的例子中,直接 new 一個 Comparator 類型對象,而沒有定義一個變量保存該對象的引用,叫做使用匿名內(nèi)部類。在匿名內(nèi)部類的情況下,由于方法不能重復(fù)使用,可以更加明顯地看到代碼的冗余。因?yàn)槊看卧谑褂脮r需要手動 new 一個對象,并且還要寫出 compare 方法的簽名,而真正有用的其實(shí)只是 compare 的方法體。在 Java8 中,使用 lambda 表達(dá)式,可以簡化這些代碼。比如上面的 sort 方法的使用,可以簡化為:

inventory.sort((Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight() ) );

定義線程的例子:

Thread t = new Thread(new Runnable() {
 public void run(){
 System.out.println("Hello world");
 }
});

可以簡化為:

Thread t = new Thread(() -> System.out.println("Hello world"));

GUI 中點(diǎn)擊事件的例子:

Button button = new Button("Send");
button.setOnAction(new EventHandler<ActionEvent>() {
 public void handle(ActionEvent event) {
  label.setText("Sent!!");
 }
 });

可以簡化為:

Button button = new Button("Send");
button.setOnAction((ActionEvent event) -> label.setText("Sent!!"));

可以看出,lambda 表達(dá)式更加簡潔,也可以使開發(fā)者在讀寫代碼時,可以更加專注在定義的行為上。

小結(jié)

這篇文章介紹了 lambda 表達(dá)式的語法,引入 lambda 表達(dá)式的使用場景,以及使用 lambda 表達(dá)式的好處。我們將在下篇文章中講解如何定義和使用 lambda 表達(dá)式,以及與其它語言相比,lambda 表達(dá)式在 Java 中的特殊規(guī)范。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • java讀取ftp中TXT文件的案例

    java讀取ftp中TXT文件的案例

    這篇文章主要介紹了java讀取ftp中TXT文件的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Spring boot如何基于攔截器實(shí)現(xiàn)訪問權(quán)限限制

    Spring boot如何基于攔截器實(shí)現(xiàn)訪問權(quán)限限制

    這篇文章主要介紹了Spring boot如何基于攔截器實(shí)現(xiàn)訪問權(quán)限限制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • springboot動態(tài)加載jar包動態(tài)配置實(shí)例詳解

    springboot動態(tài)加載jar包動態(tài)配置實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于springboot動態(tài)加載jar包動態(tài)配置的相關(guān)資料,在項(xiàng)目開發(fā)的過程中,有時候需要動態(tài)靈活的加載某個jar包并執(zhí)行其里面的方法的時候,需要的朋友可以參考下
    2023-11-11
  • Java使用Junit4.jar進(jìn)行單元測試的方法

    Java使用Junit4.jar進(jìn)行單元測試的方法

    今天通過本文給大家介紹Java使用Junit4.jar進(jìn)行單元測試的方法,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-11-11
  • Java?switch?case語句舉例詳解

    Java?switch?case語句舉例詳解

    這篇文章主要給大家介紹了關(guān)于Java?switch?case語句舉例詳解的相關(guān)資料,switch case語句是一種流程控制語句,用于根據(jù)不同的條件執(zhí)行不同的代碼塊,需要的朋友可以參考下
    2023-10-10
  • ThreadLocal原理介紹及應(yīng)用場景

    ThreadLocal原理介紹及應(yīng)用場景

    本文詳細(xì)講解了ThreadLocal原理介紹及應(yīng)用場景,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • SpringBoot3實(shí)現(xiàn)統(tǒng)一結(jié)果封裝的示例代碼

    SpringBoot3實(shí)現(xiàn)統(tǒng)一結(jié)果封裝的示例代碼

    Spring Boot進(jìn)行統(tǒng)一結(jié)果封裝的主要目的是提高開發(fā)效率、降低代碼重復(fù)率,并且提供一致的API響應(yīng)格式,從而簡化前后端交互和錯誤處理,所以本文給大家介紹了SpringBoot3實(shí)現(xiàn)統(tǒng)一結(jié)果封裝的方法,需要的朋友可以參考下
    2024-03-03
  • Java?方法的定義與調(diào)用詳解

    Java?方法的定義與調(diào)用詳解

    在java中,方法就是用來完成解決某件事情或?qū)崿F(xiàn)某個功能的辦法。方法實(shí)現(xiàn)的過程中,會包含很多條語句用于完成某些有意義的功能——通常是處理文本,控制輸入或計(jì)算數(shù)值,這篇文章我們來探究一下方法的定義與調(diào)用
    2022-04-04
  • 詳解Java實(shí)現(xiàn)JSONArray轉(zhuǎn)Map的三種實(shí)現(xiàn)方式

    詳解Java實(shí)現(xiàn)JSONArray轉(zhuǎn)Map的三種實(shí)現(xiàn)方式

    本文主要介紹了Java實(shí)現(xiàn)JSONArray轉(zhuǎn)Map的三種實(shí)現(xiàn)方式,本文只是自己常用的三種,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 淺析Java IO相關(guān)知識點(diǎn)

    淺析Java IO相關(guān)知識點(diǎn)

    本篇文章給大家分享了關(guān)于java io的一些相關(guān)知識點(diǎn)以及相關(guān)內(nèi)容,對此有需要的朋友可以學(xué)習(xí)參考下。
    2018-05-05

最新評論

曲水县| 社旗县| 聂拉木县| 兴隆县| 罗山县| 常山县| 日土县| 镇康县| 阜南县| 民和| 平昌县| 资中县| 哈巴河县| 墨脱县| 古交市| 鹤山市| 磴口县| 灵石县| 通江县| 江西省| 冀州市| 金坛市| 许昌市| 孟津县| 肇源县| 岱山县| 禄丰县| 凤台县| 保德县| 阳城县| 九龙坡区| 宜都市| 宁海县| 弥渡县| 将乐县| 九寨沟县| 新余市| 武宣县| 宜宾市| 吉木乃县| 岳普湖县|