您好,登錄后才能下訂單哦!
lambda表達(dá)式怎么在Java8中使用?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
lambda 表達(dá)式的語(yǔ)法
lambda 表達(dá)式由參數(shù),->,以及函數(shù)體三部分組成。其實(shí)函數(shù)體可以是表達(dá)式,也可以是語(yǔ)句。語(yǔ)句應(yīng)該包含在{} 里,而表達(dá)式不能。
lambda 表達(dá)式舉例
(List<String> list) -> list.isEmpty() // 布爾類(lèi)型表達(dá)式 () -> new Apple(10) // 創(chuàng)建一個(gè)新對(duì)象 (Apple a) -> { System.out.println(a.getWeight()); } // 使用一個(gè)對(duì)象的屬性 (String s) -> s.length() // 選擇或提取一個(gè)對(duì)象的屬性 (int a, int b) -> a * b // 組合兩個(gè)參數(shù) (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()) // 比較兩個(gè)對(duì)象
行為參數(shù)化
可以看到,lambda 表達(dá)式著重表達(dá)了行為。其實(shí)在 java8 之前,就已經(jīng)有類(lèi)似將行為作為參數(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()); } });
在上面的例子中,定義了一個(gè) Comparator 接口,并且定義了 compare 方法。List 類(lèi)型的 inventory,定義了 sort 方法,該方法以 Comparator 作為參數(shù)。在使用時(shí),生成一個(gè)匿名或不匿名的 Comparator 對(duì)象,該對(duì)象實(shí)現(xiàn)了 compare 方法,指定了具體的比較行為,再將 Comparator 對(duì)象作為參數(shù),傳給 sort 方法。實(shí)際上的作用,就是將比較行為,作為參數(shù),傳給 sort 方法,這種思想和做法就叫作“行為參數(shù)化”。一個(gè)使用的方法(比如 sort 方法)可以對(duì)應(yīng)多種行為,當(dāng)需要更改行為時(shí),只需要修改表示行為的代碼,使用方不必做出修改,增加了代碼的健壯性。
匿名內(nèi)部類(lèi)
而像上面的例子中,直接 new 一個(gè) Comparator 類(lèi)型對(duì)象,而沒(méi)有定義一個(gè)變量保存該對(duì)象的引用,叫做使用匿名內(nèi)部類(lèi)。在匿名內(nèi)部類(lèi)的情況下,由于方法不能重復(fù)使用,可以更加明顯地看到代碼的冗余。因?yàn)槊看卧谑褂脮r(shí)需要手動(dòng) new 一個(gè)對(duì)象,并且還要寫(xiě)出 compare 方法的簽名,而真正有用的其實(shí)只是 compare 的方法體。在 Java8 中,使用 lambda 表達(dá)式,可以簡(jiǎn)化這些代碼。比如上面的 sort 方法的使用,可以簡(jiǎn)化為:
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"); } });
可以簡(jiǎn)化為:
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!!"); } });
可以簡(jiǎn)化為:
Button button = new Button("Send"); button.setOnAction((ActionEvent event) -> label.setText("Sent!!"));
可以看出,lambda 表達(dá)式更加簡(jiǎn)潔,也可以使開(kāi)發(fā)者在讀寫(xiě)代碼時(shí),可以更加專(zhuān)注在定義的行為上。
看完上述內(nèi)容,你們掌握l(shuí)ambda表達(dá)式怎么在Java8中使用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(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)容。