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

Java 8 引入lambda表達(dá)式的原因解析

 更新時(shí)間:2019年08月24日 14:59:18   作者:上帝愛(ài)吃蘋(píng)果  
這篇文章主要介紹了Java 8 引入lambda表達(dá)式的原因解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

在Java8出現(xiàn)之前,如果你想傳遞一段代碼到另一個(gè)方法里是很不方便的。你幾乎不可能將代碼塊到處傳遞,因?yàn)镴ava是一個(gè)面向?qū)ο蟮恼Z(yǔ)言,因此你要構(gòu)建一個(gè)屬于某個(gè)類(lèi)的對(duì)象,由它的某個(gè)方法來(lái)放置你想傳遞的代碼塊。

下面看兩個(gè)非常典型的例子,構(gòu)造線程與比較器:

構(gòu)造線程:

我們要想在另一個(gè)線程中執(zhí)行一些代碼邏輯時(shí),通常會(huì)將代碼放在一個(gè)實(shí)現(xiàn)Runnable接口的run方法當(dāng)中,如下圖:

public static void main(String[] args) {
  myThread t = new myThread();

}
class myThread implements Runnable {
  @Override
  public void run() {
    System.out.println("放入你想執(zhí)行的代碼");
  }
}

你寫(xiě)這段代碼的目的就是想開(kāi)啟新的線程來(lái)執(zhí)行你定制的代碼,為此你創(chuàng)建了myThread。

接著我們看下構(gòu)造比較器:

public static void main(String[] args) {
  List<Integer> list = new ArrayList<>();
  list.add(2);
  list.add(5);
  list.add(1);
  list.add(4);
  list.add(3);
  Comparator<Integer> comparator = new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
      return o2 - o1;
    }
  };
  Collections.sort(list, comparator);
}

sort 方法會(huì)不斷調(diào)用compare 方法,對(duì)順序不對(duì)的元素進(jìn)行重新排序,直到有序?yàn)橹?。你?xiě)比較器的目的就是給Collections的sort方法傳遞一段比較邏輯的代碼片段,這段代碼會(huì)被整合到排序排序邏輯中,為此你寫(xiě)了一個(gè)類(lèi)和一個(gè)方法。

上述兩個(gè)例子你會(huì)看到它們的相似點(diǎn),將一段代碼傳遞給其他調(diào)用者(一個(gè)線程池或者一個(gè)排序方法),這段代碼會(huì)在新的方法中被調(diào)用。

但是,在Java8出現(xiàn)之前,如果你想傳遞一段代碼到另一個(gè)方法里是很不方便的,因?yàn)镴ava是一個(gè)面向?qū)ο蟮恼Z(yǔ)言,因此你要構(gòu)建一個(gè)屬于某個(gè)類(lèi)的對(duì)象,由它的某個(gè)方法來(lái)放置你想傳遞的代碼塊。而在一些其他語(yǔ)言中可以直接傳遞代碼塊,比如JS。為此,Java決定加入了lambda表達(dá)式的語(yǔ)法糖。

lambda改造

對(duì)于傳入比較器代碼塊,我們的目的是想傳入一段比較邏輯,利用lambda表達(dá)式可以:

lambda表達(dá)式的語(yǔ)法格式是:參數(shù)->一個(gè)表達(dá)式,如果想傳入的代碼無(wú)法用一個(gè)表達(dá)式表示,則可以用 參數(shù)->{多個(gè)表達(dá)式}。如果沒(méi)有參數(shù)需要傳遞,則可以用()->表達(dá)式的形式。

public static void main(String[] args) {

    List<Integer> list = new ArrayList<>();
    list.add(2);
    list.add(5);
    list.add(1);
    list.add(4);
    list.add(3);

    Collections.sort(list, (one,two)->{
      System.out.println("one="+one);
      System.out.println("two="+two);
      return two - one;
    });
  }

編譯器會(huì)解析出來(lái) one 與 two 是原先接口compare方法的入?yún)?,并自?dòng)賦予Integer類(lèi)型。

對(duì)于構(gòu)造線程,我們的目的就是想傳入一段線程執(zhí)行的代碼,利用lambda表達(dá)式可以這樣做:

public static void main(String[] args) {
  new Thread(() -> {
    for (int i = 0; i < 100; i++) {
      System.out.println("這是一個(gè)線程" + i);
    }
  }).start();
  for (int i = 100; i < 200; i++) {
    System.out.println("這是主線程" + i);
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue數(shù)據(jù)響應(yīng)式原理重寫(xiě)函數(shù)實(shí)現(xiàn)數(shù)組響應(yīng)式監(jiān)聽(tīng)

    vue數(shù)據(jù)響應(yīng)式原理重寫(xiě)函數(shù)實(shí)現(xiàn)數(shù)組響應(yīng)式監(jiān)聽(tīng)

    Vue的通過(guò)數(shù)據(jù)劫持的方式實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,即使用Object.defineProperty()來(lái)實(shí)現(xiàn)對(duì)屬性的劫持,但是Object.defineProperty()中的setter是無(wú)法直接實(shí)現(xiàn)數(shù)組中值的改變的劫持行為的,需要的朋友可以參考下
    2023-05-05
  • Java 實(shí)現(xiàn)貪吃蛇游戲的示例

    Java 實(shí)現(xiàn)貪吃蛇游戲的示例

    這篇文章主要介紹了Java 如何實(shí)現(xiàn)貪吃蛇游戲,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Java檢查字符串是否一致的四種方法

    Java檢查字符串是否一致的四種方法

    字符串比較是常見(jiàn)的操作,包括比較相等、比較大小、比較前綴和后綴串等,在 Java 中,比較字符串的常用方法有四個(gè):equals(),equalsIgnoreCase(),compareTo()和compareToIgnoreCase(),下面詳細(xì)介紹這四個(gè)方法的使用
    2024-04-04
  • Java背包問(wèn)題求解實(shí)例代碼

    Java背包問(wèn)題求解實(shí)例代碼

    這篇文章主要介紹了Java背包問(wèn)題求解實(shí)例代碼,其中涉及兩種背包:01和完全背包。分別講述了兩種背包的思路和實(shí)現(xiàn)方法,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • java如何使用自己的maven本地倉(cāng)庫(kù)詳解

    java如何使用自己的maven本地倉(cāng)庫(kù)詳解

    這篇文章主要給大家介紹了關(guān)于java如何使用自己的maven本地倉(cāng)庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 將SpringBoot的Jar注冊(cè)成Windows服務(wù)的實(shí)現(xiàn)方法

    將SpringBoot的Jar注冊(cè)成Windows服務(wù)的實(shí)現(xiàn)方法

    當(dāng)前項(xiàng)目有個(gè)地圖編輯器,后端用的是SpringBoot框架,外網(wǎng)剛好有一臺(tái)空閑的Windows服務(wù)器就直接拿來(lái)用了,將Java程序部署成Windows服務(wù)可以用WinSW (Windows Service Wrapper)來(lái)實(shí)現(xiàn),文中有詳細(xì)的操作步驟,需要的朋友可以參考下
    2023-11-11
  • Java并發(fā)編程之淺談ReentrantLock

    Java并發(fā)編程之淺談ReentrantLock

    今天帶大家學(xué)習(xí)Java并發(fā)編程的相關(guān)知識(shí),文中對(duì)Java ReentrantLock作了非常詳細(xì)的圖文示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • javaWeb使用Kaptcha組件生成驗(yàn)證碼

    javaWeb使用Kaptcha組件生成驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了javaWeb使用Kaptcha組件生成驗(yàn)證碼的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • SpringBoot對(duì)SSL的支持實(shí)現(xiàn)

    SpringBoot對(duì)SSL的支持實(shí)現(xiàn)

    本文主要介紹了SpringBoot對(duì)SSL的支持實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Spring Boot如何移除內(nèi)嵌Tomcat,使用非web方式啟動(dòng)

    Spring Boot如何移除內(nèi)嵌Tomcat,使用非web方式啟動(dòng)

    這篇文章主要介紹了Spring Boot如何移除內(nèi)嵌Tomcat,使用非web方式啟動(dòng),幫助大家更好的理解和學(xué)習(xí)使用spring boot框架,感興趣的朋友可以了解下
    2021-02-02

最新評(píng)論

石柱| 梅河口市| 高淳县| 新民市| 巴林右旗| 庆城县| 馆陶县| 沾化县| 鹤岗市| 横峰县| 华亭县| 岫岩| 乌兰浩特市| 黄大仙区| 永州市| 舟山市| 吴川市| 茶陵县| 新郑市| 万安县| 鱼台县| 永胜县| 永昌县| 甘洛县| 平果县| 昆山市| 隆化县| 镇雄县| 张掖市| 青铜峡市| 正安县| 炎陵县| 上杭县| 虞城县| 东阳市| 天津市| 方正县| 洛隆县| 册亨县| 新乡县| 焉耆|