java8 lambda的使用


與python不一樣,python lambda是定義匿名函數,而在java8中lambda是匿名內部類

例1、用lambda表達式實現Runnable

我開始使用Java 8時,首先做的就是使用lambda表達式替換匿名類,而實現Runnable接口是匿名類的最好示例。看一下Java 8之前的runnable實現方法,需要4行代碼,而使用lambda表達式只需要一行代碼。我們在這里做了什么呢?那就是用() -> {}代碼塊替代了整個匿名類

復制代碼
// Java 8之前:
new Thread(new Runnable() {
    @Override
    public void run() {
    System.out.println("Before Java8, too much code for too little to do");
    }
}).start();

//Java 8方式:
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start();
復制代碼

輸出:

too much code, for too little to do
Lambda expression rocks !!

這個例子向我們展示了Java 8 lambda表達式的語法。你可以使用lambda寫出如下代碼:

(params) -> expression
(params) -> statement
(params) -> { statements }

例如,如果你的方法不對參數進行修改、重寫,只是在控制台打印點東西的話,那么可以這樣寫:

() -> System.out.println("Hello Lambda Expressions");

如果你的方法接收兩個參數,那么可以寫成如下這樣:

(int even, int odd) -> even + odd

順便提一句,通常都會把lambda表達式內部變量的名字起得短一些。這樣能使代碼更簡短,放在同一行。所以,在上述代碼中,變量名選用a、b或者x、y會比even、odd要好。

例2、使用Java 8 lambda表達式進行事件處理

如果你用過Swing API編程,你就會記得怎樣寫事件監聽代碼。這又是一個舊版本簡單匿名類的經典用例,但現在可以不這樣了。你可以用lambda表達式寫出更好的事件監聽代碼,如下所示:

復制代碼
// Java 8之前:
JButton show =  new JButton("Show");
show.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
    System.out.println("Event handling without lambda expression is boring");
    }
});

// Java 8方式:
show.addActionListener((e) -> {
    System.out.println("Light, Camera, Action !! Lambda expressions Rocks");
});
復制代碼

Java開發者經常使用匿名類的另一個地方是為 Collections.sort() 定制 Comparator。在Java 8中,你可以用更可讀的lambda表達式換掉丑陋的匿名類。我把這個留做練習,應該不難,可以按照我在使用lambda表達式實現 Runnable 和 ActionListener 的過程中的套路來做。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM