① 用java 8裡面的lambda表達式寫一個簡單加法運算
/*
一個介面,如果只有一個顯式聲明的抽象方法,
那麼它就是一個函數介面。
一般用@FunctionalInterface標注出來(也可以不標)
*/
public interface Inteface1{
//可以不用abstract修飾
public abstract void test(int x,int y);
//public void test1();//會報錯,不能有兩個方法,盡管沒有使用abstract修飾
public boolean equals(Object o);//equals屬於Object的方法,所以不會報錯
}
public class Test{
public static void main(String args[]){
Inteface1 f1=(int x,int y)->{System.out.println(x+y);};
f1.test(3,4);
Inteface1 f2=(int x,int y)->{ System.out.println("Hello Lambda!\t the result is " +(x+y));};
f2.test(3,4);
}
}
② java8 lambda 表達式是個什麼
為了支持函數式編程,Java 8引入了Lambda表達式.
在Java 8中採用的是內部類來實現Lambda表達式.具體實現代碼,可以通過debug看, 同時通過位元組碼查看工具及反編譯工具來驗證.
自從lambda表達式成為Java語言的一部分之後,Java集合(Collections)API就面臨著大幅變化。而JSR 355(規定了Java lambda表達式的標准)的正式啟用更是使得Java集合API變的過時不堪。
盡管我們可以從頭實現一個新的集合框架(比如「Collection II」),但取代現有的集合框架是一項非常艱難的工作,因為集合介面滲透了Java生態系統的每個角落,將它們一一換成新類庫需要相當長的時間。因此,我們決定採取演化的策略(而非推倒重來)以改進集合API: 為現有的介面(例如Collection,List和Stream)增加擴展方法;
在類庫中增加新的流(stream,即java.util.stream.Stream)抽象以便進行聚集(aggregation)操作;
改造現有的類型使之可以提供流視圖(stream view);
改造現有的類型使之可以容易的使用新的編程模式,這樣用戶就不必拋棄使用以久的類庫,例如ArrayList和HashMap
(當然這並不是說集合API會常駐永存,畢竟集合API在設計之初並沒有考慮到lambda表達式。我們可能會在未來的JDK中添加一個更現代的集合類庫)。
除了上面的改進,還有一項重要工作就是提供更加易用的並行(Parallelism)庫。盡管Java平台已經對並行和並發提供了強有力的支持,然而開發者在實際工作(將串列代碼並行化)中仍然會碰到很多問題。因此,我們希望Java類庫能夠既便於編寫串列代碼也便於編寫並行代碼,因此我們把編程的重點從具體執行細節(how computation should be formed)轉移到抽象執行步驟(what computation should be perfomed)。
③ 消滅冗長代碼,掌握 Java 8 Lambda 表達式
Java 8引入的Lambda表達式是一種強大的匿名函數,它將方法參數、表達式和代碼塊集成到一個可傳遞的函數體中,簡化了代碼結構,支持函數式編程。Lambda的起源可以追溯到數學家丘奇,但直到Java 8,它才真正融入Java,減少了冗長的樣板代碼,提升了代碼的可讀性和維護性。
使用Lambda,代碼變得更簡潔,比如,與內部類相比,Lambda表達式更緊湊,減少了編寫和維護的代碼量。它支持函數式編程的核心特性,如高階函數和閉包,可以作為參數傳遞或從函數返回。例如,高階函數如filter和map,使得集合操作更為便捷。
Java 8內置的函數式介面如Consumer、Supplier、Function和Predicate,幫助我們更好地應用Lambda。自定義函數式介面也支持Lambda,進一步擴展了其靈活性。在集合操作中,Lambda表現得尤為突出,如遍歷、過濾、排序,甚至與Stream API結合,提供了強大的數據處理能力。
盡管Lambda簡化了並發編程,如創建線程和非同步操作,但仍有一些局限,例如僅適用於單方法介面,且復雜控制流程可能需要傳統代碼。使用時需要注意過度使用可能導致代碼可讀性下降,性能開銷以及變數捕獲的影響。
總的來說,Lambda是Java 8的一大進步,它簡化了編程,但同時也需要開發者在實際應用中權衡其優缺點,隨著Java的演進,Lambda將繼續推動函數式編程在Java中的應用和發展。