您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)如何在Java 8中引入lambda表達(dá)式,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
構(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í)行的代碼"); } }
你寫這段代碼的目的就是想開啟新的線程來執(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)橹?。你寫比較器的目的就是給Collections的sort方法傳遞一段比較邏輯的代碼片段,這段代碼會(huì)被整合到排序排序邏輯中,為此你寫了一個(gè)類和一個(gè)方法。
上述兩個(gè)例子你會(huì)看到它們的相似點(diǎn),將一段代碼傳遞給其他調(diào)用者(一個(gè)線程池或者一個(gè)排序方法),這段代碼會(huì)在新的方法中被調(diào)用。
但是,在Java8出現(xiàn)之前,如果你想傳遞一段代碼到另一個(gè)方法里是很不方便的,因?yàn)镴ava是一個(gè)面向?qū)ο蟮恼Z言,因此你要構(gòu)建一個(gè)屬于某個(gè)類的對(duì)象,由它的某個(gè)方法來放置你想傳遞的代碼塊。而在一些其他語言中可以直接傳遞代碼塊,比如JS。為此,Java決定加入了lambda表達(dá)式的語法糖。
lambda改造
對(duì)于傳入比較器代碼塊,我們的目的是想傳入一段比較邏輯,利用lambda表達(dá)式可以:
lambda表達(dá)式的語法格式是:參數(shù)->一個(gè)表達(dá)式,如果想傳入的代碼無法用一個(gè)表達(dá)式表示,則可以用 參數(shù)->{多個(gè)表達(dá)式}。如果沒有參數(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ì)解析出來 one 與 two 是原先接口compare方法的入?yún)?,并自?dòng)賦予Integer類型。
對(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); } }
以上就是如何在Java 8中引入lambda表達(dá)式,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。