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

More Related Content

PPTX
2014 Java Developer Day會後分享 Java Functional API
PDF
函数式编程
PDF
Lambda
PDF
CH12:Lambda
PDF
Intro to Java 8 Closures (Dainius Mezanskas)
PPTX
第1章 入门
PDF
ELK 交流学习
PPT
Java SE 8 技術手冊第 12 章 - Lambda
2014 Java Developer Day會後分享 Java Functional API
函数式编程
Lambda
CH12:Lambda
Intro to Java 8 Closures (Dainius Mezanskas)
第1章 入门
ELK 交流学习
Java SE 8 技術手冊第 12 章 - Lambda
Ad

Java functional api