Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Java Functional API
認識Lambda 
在諸如Lisp、Python的語言中,Lambda是代表 
● 匿名函數(Anonymous) 
● 閉包(Closure) 
● 在許多程式語言之中早就有它的身影存在 
在實用上 
● is a way to refact...
從JavaScript看起 
當函式是物件時,我們可以: 
● 根據需要將之傳遞給另一個變數參考 
● 可以傳遞給別的函式進行動作 
● 流桯中不同的演算需求,可以設計回呼函式 
來抽換
從JavaScript看起 
這樣做可以 
● 簡化語法 
● 開放了更多不同設計方式的可能性
看看Java
看看Java 
匿名類別 
● 程式碼太冗長,可讀性降低 
● sort在做什麼?
看看Java 
宣告實作介面變數 
● 原來是在做升冪排序 
● 但...
看看Java
Java Lambda 
等號左邊在宣告變數時已指定型別,所以
Java Lambda 
Interface Comparator<T> 
→int compare(T o1, T o2) 
編譯器可以從Comparator<Integer>中推斷 
出n1與n2的型態,所以
Java Lambda
Java Lambda 
Lambda表式示 
● 等號右邊是Lambda表示式 
o 本身是中性的,不代表任何型態的實例 
o 只關心方法簽署上的參數與回傳值,忽略方法名稱 
● 等號左邊為Lambda表示式的目標型態 
● 目標型態存在時,...
Java Lambda 
函式介面(Functional Interface) 
● Comparator是一個函式介面 
● JDK8的Lambda並未導入新型態,而是就現有 
interface語法來定義,作為目標型態 
● 要求僅具單一抽...
Java Lambda 
最後我們可寫成 
更簡潔明白了
Java Lambda
Java Lambda 
方法參照 
● 重用現有方法實作,可以避免到處寫下 
Lambda運算式 
● 程式碼更加清楚 
● 靜態方法(static method)與物件的實例方法 
(instance method)皆可參考
Java Lambda 
JDK8的Lambda 
● 語法上的新增 
● 與既有的API相容,並增加其功能 
● 全新且更有威力的API 
從現在的程式進行重構開始著手
Functional API
Functional API 
● Predicate<T> 
o T → test(T t) → boolean 
● Function<T,R> 
o T → apply(T t) → R 
● Consumer<T> 
o T → acc...
Functional API
Functional API 
● Lazy 
o 處理檔案的IO,變得更有效率 
● 使用Optional來代替null 
● Supplier<T> 
o none → get() → T
Functional API 
平行處理 
JDK8引入Lambda目的之一,就是為了讓開 
發者在開發平行程式更為簡便
Functional Programming 
當你在 
● 重構現有的程式碼 
● 運用filter、map、reduce等 
● 回傳Optional而非null 
● 開始使用parallelism以及考慮相關議題 
就是在實作Funct...
2014 Java Developer Day會後分享 Java Functional API
Upcoming SlideShare
Loading in …5
×

2014 Java Developer Day會後分享 Java Functional API

475 views

Published on

2014 Java Developer Day會後分享 Java Functional API

Published in: Software
  • Be the first to comment

  • Be the first to like this

2014 Java Developer Day會後分享 Java Functional API

  1. 1. Java Functional API
  2. 2. 認識Lambda 在諸如Lisp、Python的語言中,Lambda是代表 ● 匿名函數(Anonymous) ● 閉包(Closure) ● 在許多程式語言之中早就有它的身影存在 在實用上 ● is a way to refactor refactored codes
  3. 3. 從JavaScript看起 當函式是物件時,我們可以: ● 根據需要將之傳遞給另一個變數參考 ● 可以傳遞給別的函式進行動作 ● 流桯中不同的演算需求,可以設計回呼函式 來抽換
  4. 4. 從JavaScript看起 這樣做可以 ● 簡化語法 ● 開放了更多不同設計方式的可能性
  5. 5. 看看Java
  6. 6. 看看Java 匿名類別 ● 程式碼太冗長,可讀性降低 ● sort在做什麼?
  7. 7. 看看Java 宣告實作介面變數 ● 原來是在做升冪排序 ● 但...
  8. 8. 看看Java
  9. 9. Java Lambda 等號左邊在宣告變數時已指定型別,所以
  10. 10. Java Lambda Interface Comparator<T> →int compare(T o1, T o2) 編譯器可以從Comparator<Integer>中推斷 出n1與n2的型態,所以
  11. 11. Java Lambda
  12. 12. Java Lambda Lambda表式示 ● 等號右邊是Lambda表示式 o 本身是中性的,不代表任何型態的實例 o 只關心方法簽署上的參數與回傳值,忽略方法名稱 ● 等號左邊為Lambda表示式的目標型態 ● 目標型態存在時,編譯器就可以據此推斷出 型態
  13. 13. Java Lambda 函式介面(Functional Interface) ● Comparator是一個函式介面 ● JDK8的Lambda並未導入新型態,而是就現有 interface語法來定義,作為目標型態 ● 要求僅具單一抽象方法 ● 其他如Runnable(void run())、 Callable(V call() throw Exception)等
  14. 14. Java Lambda 最後我們可寫成 更簡潔明白了
  15. 15. Java Lambda
  16. 16. Java Lambda 方法參照 ● 重用現有方法實作,可以避免到處寫下 Lambda運算式 ● 程式碼更加清楚 ● 靜態方法(static method)與物件的實例方法 (instance method)皆可參考
  17. 17. Java Lambda JDK8的Lambda ● 語法上的新增 ● 與既有的API相容,並增加其功能 ● 全新且更有威力的API 從現在的程式進行重構開始著手
  18. 18. Functional API
  19. 19. Functional API ● Predicate<T> o T → test(T t) → boolean ● Function<T,R> o T → apply(T t) → R ● Consumer<T> o T → accept(T t) → void
  20. 20. Functional API
  21. 21. Functional API ● Lazy o 處理檔案的IO,變得更有效率 ● 使用Optional來代替null ● Supplier<T> o none → get() → T
  22. 22. Functional API 平行處理 JDK8引入Lambda目的之一,就是為了讓開 發者在開發平行程式更為簡便
  23. 23. Functional Programming 當你在 ● 重構現有的程式碼 ● 運用filter、map、reduce等 ● 回傳Optional而非null ● 開始使用parallelism以及考慮相關議題 就是在實作Functional Programming

×