Java8 新功能筆記 (2) - Lambda expression

Lambda expression

Java 8 新加入的功能 Lambda 表達式,讓你可以將函式做為方法的參數,如果你寫過 JavaScript 應該會覺得有點像。Lambda 有許多的優點,可以簡化匿名內部類別、偵聽器及事件處理等的冗長程式碼,讓它們不只變短也易讀。另外還可以實體化前面介紹的函式介面、並且以更方便的方式操作集合等等。
Lambda expression 的樣子:
參數 -> 表達式
就是這麼簡單,讓 Java 變得不再那麼囉嗦。

參數的部份:
  • ():表示無參數。
  • 變數:表示有一個輸入,例如:x
  • (變數1, 變數2):表示有兩個變數並省略型別:例如:(x, y)
  • (型別 變數1, 型別 變數2):表示兩個變數並指定型別:例如:(int x, int y)
  • 單一參數不需括號,零或多個參數則需括號。

表達式的部份:
  • {}:表示不執行任何事。
  • System.out.println(x+y);:輸出到console的單行敍述且不回傳值。
  • x+y:單一運算式且回傳值,單行敍述會自動回傳值。
  • {...}:多行敍述,若要回傳值必須加 return。

範例:Runnable 的簡化

舊式寫法:
Runnable run = new Runnable() {
    @Override
    public void run() {
        System.out.print("Runnable");
    }
};

Thread t = new Thread(run);
t.start();
Runnable 的部份要寫 6 行,如果改用 Lambda expression:
Runnable run = () -> System.out.print("Hello Lambda~");
Thread t = new Thread(run);
t.start();
現在 Runnable 的部份只要一行,實際上還可以更簡化:
new Thread(() -> System.out.println("Hello Lambda~")).start();
原本舊的寫法要花掉 8 行,現在只要 1 行就完成了。寫得越少就越容易維護,而且程式碼反而更好讀,不會有多餘的關鍵字來甘擾。
本文網址:http://blog.tonycube.com/2015/10/java-java8-2-lambda-expression.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。