學(xué)習(xí)筆記一 Java8新特性概述之Lambda表達(dá)式

??Java8帶來了一系列令人耳目一新的語言特性,其中最重要的就是接受了函數(shù)式編程的風(fēng)格。Lambda表達(dá)式、接口的演變、庫的重構(gòu)、支持流數(shù)據(jù)處理、新的并行處理等新概念是其中最大的變化。
??在具體介紹這些概念之前,我們先用一些簡單的例子來看看到底什么是Lambda表達(dá)式。
1、Runnable例子
??我們先用傳統(tǒng)的方式來創(chuàng)建一個(gè)Runnable實(shí)例以及一個(gè)運(yùn)行該接口的線程。

Runnable oldRunnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("do something");
            doSomething();
        }
    };

??啟用線程執(zhí)行該接口:

new Thread(oldRunnable).start();

??從上面的代碼可以看出,為了實(shí)現(xiàn)我們想要的邏輯,我們必須先實(shí)現(xiàn)這個(gè)Runnable接口,把相關(guān)代碼封裝在run方法里面,然后再創(chuàng)建一個(gè)線程去啟動(dòng)接口的執(zhí)行。
2 、匿名類
??另一種方式是使用匿名類。這兒我們不必去實(shí)例化Runnable接口而是直接使用內(nèi)聯(lián)的匿名類。

new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("do something");
                doSomething();
            }
        }).start();

??比較這兩種寫法,我們可以看出,匿名類相對第一種寫法僅僅是減少了變量的定義,整個(gè)邏輯其實(shí)并沒有區(qū)別,我們真正想要執(zhí)行的doSomething()仍然是隱晦的,被其他多余的代碼所干擾。
3、使用Lambda表達(dá)式
??我們先不說關(guān)于Lambda表達(dá)式太多的細(xì)節(jié),而是先看下上面的邏輯如何使用Lambda來替換。

// 創(chuàng)建Lambda表達(dá)式
Runnable doSomethingLambda = () -> doSomething();

// 創(chuàng)建線程執(zhí)行
new Thread(doSomethingLambda).start();

??我們創(chuàng)建了第一個(gè)Lambda表達(dá)式直接調(diào)用我們想要執(zhí)行的方法,把這個(gè)表達(dá)式賦值給Runnable變量,然后把這個(gè)變量作為Thread的入?yún)ⅰ_@樣代碼不僅清晰而且簡潔,直接體現(xiàn)了想要執(zhí)行的邏輯意圖,省去了其他的干擾。
??另一種寫法:

new Thread(() -> {
            System.out.println("do something");
            doSomething();
        }).start();

??我們可以看到Thread直接收到一段代碼作為入?yún)?,而不需要?jiǎng)?chuàng)建Runnable變量。
??現(xiàn)在如果你想要做另一件事情,你可以很容易地實(shí)現(xiàn):

new Thread(() -> doOtherThing()).start();

??這種我們傳遞代碼像以前傳遞數(shù)據(jù)一樣的使用方式,在Java8之前是不支持的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容