Java 8 與 retrolambda

Justin Lin
Justin LinTechnology / Community Evangelist at Free lancer
Java 8 與 retrolambda
Justin Lin
caterpillar@openhome.cc
http://openhome.cc
議程
• 從《重構》開始
• 使用 Java 8 Lambda
• Retrolambda
• 繼續重構
2
@
L
->
::
8765
從《重構》開始
3
4
5
租金計算
6
點數計算
租金計算
7
幾件事?
點數計算
8
點數加總
租借描述
租金加總
9
點數加總
租金加總
使用 Java 8 Lambda
10
11
迭代 Rental
加總租金 取得租金
三件事?
三件事?
12
迭代 Rental
加總點數 取得點數
13
Lambda expressionStream API
Lambda expression?
14
->
Functional interface
15
Code as data
• Method reference
16
::
17
Stream API?
18
• Stream 從來源取出資料,來源可以是 …
– Collection, 例如 collection.stream()
– 陣列, 例如 Arrays.stream(…)
– 產生器, 例如 IntStream.generate(…)
– I/O, 例如 Files.lines(…)
– …
• Stream 上有 intermediate operation 與
terminal operation。
19
20
intermediate operation
terminal operation
21
迭代 Rental
串接各筆描述
該筆租借描述
Reduce?
Reduce
• sum 就是一種 reduce 操作
22
Reduce
• 遞迴
23
Reduce
24
串接各筆描述
各筆租借描述
25
26
27
好 Lambda … 不用嗎?
′o‵
可是良葛 …
′ _`
我們上不去了 …
~~′ _`~~
Retrolambda
28
https://github.com/orfjackal/retrolambda
• 改寫 bytecode 為可運行於 Java 7, 6, 5
• 目前支援 …
– Lambda expressions
– Method references
– Try-with-resources statements
• 部份支援 …
– Default methods
– Static methods on interfaces
• 採用方式 …
– Command Line Application(結合 Ant)
– Maven Plugin
– Gradle Plugin
29
Command Line Application
• 從 Maven Centrol 下載 retrolambda.jar
30
31
Java 8 編譯
Retrolambda
Java 7 執行
Ant
32
……
Gradle
• Gradle Retrolambda Plugin
– JDK8
– Gradle 2.x
33
34
Optional
35
36
繼續重構
Java 8 API?
• LambdaJ
• Linq4j
• guava-libraries
• Joda-Time
• ThreeTen
• streamsupport
37
r
Functional API
Stream API
New Date & Time API
Java 8 API?
• streamsupport 替代 java.util.stream
38
r
39
40
41
• Commit History
42
想瞭解更多?
• Java Lambda Tutorial
• 解析 JDK8 Functional API
• Java 8 Patterns
• 認識 Gradle
• Retrolambda in Android
• Java 8 Friday: Let’s Deprecate Those
Legacy Libs
43
44
Justin Lin
caterpillar@openhome.cc
http://openhome.cc
The others?
45
1 of 45

Recommended

Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫 by
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Justin Lin
11K views59 slides
千呼萬喚始出來的 Java SE 7 by
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
1.9K views103 slides
Java 開發者的函數式程式設計 by
Java 開發者的函數式程式設計Java 開發者的函數式程式設計
Java 開發者的函數式程式設計Justin Lin
2.5K views58 slides
lambda/closure – JavaScript、Python、Scala 到 Java SE 7 by
lambda/closure – JavaScript、Python、Scala 到 Java SE 7lambda/closure – JavaScript、Python、Scala 到 Java SE 7
lambda/closure – JavaScript、Python、Scala 到 Java SE 7Justin Lin
2K views52 slides
Java SE 8 技術手冊第 12 章 - Lambda by
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJustin Lin
4.4K views100 slides
如何在 Java App 中導入 Scala by
如何在 Java App 中導入 Scala如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scalajavatwo2011
1.4K views82 slides

More Related Content

What's hot

Java SE 8 技術手冊第 14 章 - NIO 與 NIO2 by
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Justin Lin
5.6K views66 slides
Execution by
ExecutionExecution
ExecutionAngel Boy
25.6K views41 slides
給初學者的Spark教學 by
給初學者的Spark教學給初學者的Spark教學
給初學者的Spark教學Chen-en Lu
18.2K views46 slides
Java SE 8 技術手冊第 10 章 - 輸入輸出 by
Java SE 8 技術手冊第 10 章 - 輸入輸出Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出Justin Lin
2.6K views48 slides
Java SE 8 技術手冊第 16 章 - 整合資料庫 by
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Justin Lin
2.9K views101 slides
Ecmascript by
EcmascriptEcmascript
Ecmascriptjay li
7.5K views53 slides

What's hot(20)

Java SE 8 技術手冊第 14 章 - NIO 與 NIO2 by Justin Lin
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin5.6K views
Execution by Angel Boy
ExecutionExecution
Execution
Angel Boy25.6K views
給初學者的Spark教學 by Chen-en Lu
給初學者的Spark教學給初學者的Spark教學
給初學者的Spark教學
Chen-en Lu18.2K views
Java SE 8 技術手冊第 10 章 - 輸入輸出 by Justin Lin
Java SE 8 技術手冊第 10 章 - 輸入輸出Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin2.6K views
Java SE 8 技術手冊第 16 章 - 整合資料庫 by Justin Lin
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin2.9K views
Ecmascript by jay li
EcmascriptEcmascript
Ecmascript
jay li7.5K views
Javascript share by Xu Mac
Javascript shareJavascript share
Javascript share
Xu Mac84 views
Nashorn on JDK 8 (ADC2013) by Kris Mok
Nashorn on JDK 8 (ADC2013)Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)
Kris Mok2.6K views
为啥别读HotSpot VM的源码(2012-03-03) by Kris Mok
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
Kris Mok13.6K views
From Java Stream to Java DataFrame by Chen-en Lu
From Java Stream to Java DataFrameFrom Java Stream to Java DataFrame
From Java Stream to Java DataFrame
Chen-en Lu2.7K views
深入淺出 Web 容器 - Tomcat 原始碼分析 by Justin Lin
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
Justin Lin3.8K views
Java SE 8 技術手冊第 15 章 - 通用API by Justin Lin
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin2.2K views
資料永續與交換 by Justin Lin
資料永續與交換資料永續與交換
資料永續與交換
Justin Lin1.8K views
Introduction to Basic Haskell Components (In Chinese) by ChengHui Weng
Introduction to Basic Haskell Components (In Chinese)Introduction to Basic Haskell Components (In Chinese)
Introduction to Basic Haskell Components (In Chinese)
ChengHui Weng135 views
Ecma script edition5-小试 by lydiafly
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
lydiafly780 views
Java8 lambda by koji lin
Java8 lambdaJava8 lambda
Java8 lambda
koji lin5.3K views
潜力无限的编程语言Javascript by jay li
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
jay li9.4K views
5, initialization & cleanup by ted-xu
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
ted-xu283 views
Reactive X 响应式编程 by Jun Liu
Reactive X 响应式编程Reactive X 响应式编程
Reactive X 响应式编程
Jun Liu3.3K views
ES5 introduction by otakustay
ES5 introductionES5 introduction
ES5 introduction
otakustay884 views

Similar to Java 8 與 retrolambda

lua & ngx_lua 的介绍与应用 by
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用hugo
3.2K views54 slides
Retrive&rank by
Retrive&rankRetrive&rank
Retrive&rankJoseph Chang
260 views15 slides
⼤語⾔模型 LLM 應⽤開發入⾨ by
⼤語⾔模型 LLM 應⽤開發入⾨⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨Wen-Tien Chang
5.4K views94 slides
Hadoop学习总结 by
Hadoop学习总结Hadoop学习总结
Hadoop学习总结ordinary2012
1K views32 slides
Ali-tomcat by
Ali-tomcatAli-tomcat
Ali-tomcatwang hongjiang
3.2K views90 slides
Rpc原理与实现 by
Rpc原理与实现Rpc原理与实现
Rpc原理与实现wavefly
2.7K views18 slides

Similar to Java 8 與 retrolambda(20)

lua & ngx_lua 的介绍与应用 by hugo
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
hugo3.2K views
⼤語⾔模型 LLM 應⽤開發入⾨ by Wen-Tien Chang
⼤語⾔模型 LLM 應⽤開發入⾨⼤語⾔模型 LLM 應⽤開發入⾨
⼤語⾔模型 LLM 應⽤開發入⾨
Wen-Tien Chang5.4K views
Rpc原理与实现 by wavefly
Rpc原理与实现Rpc原理与实现
Rpc原理与实现
wavefly2.7K views
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509 by tidesq
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
tidesq2.5K views
Linux binary Exploitation - Basic knowledge by Angel Boy
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
Angel Boy3K views
twMVC#19 | opserver監控服務的解決 by twMVC
twMVC#19 | opserver監控服務的解決twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決
twMVC773 views
Weibo lamp improvements by Xinchen Hui
Weibo lamp improvementsWeibo lamp improvements
Weibo lamp improvements
Xinchen Hui17.4K views
Metro Style Apps from C++ Developers' View by Eric ShangKuan
Metro Style Apps from C++ Developers' ViewMetro Style Apps from C++ Developers' View
Metro Style Apps from C++ Developers' View
Eric ShangKuan1.1K views
in in der 響應式編程 by 景隆 張
in in der 響應式編程in in der 響應式編程
in in der 響應式編程
景隆 張5.1K views
Nosql及其主要产品简介 by 振林 谭
Nosql及其主要产品简介Nosql及其主要产品简介
Nosql及其主要产品简介
振林 谭919 views
Tcpcopy 阿里技术沙龙 by drewz lin
Tcpcopy 阿里技术沙龙Tcpcopy 阿里技术沙龙
Tcpcopy 阿里技术沙龙
drewz lin2.7K views
D2_Node在淘宝的应用实践 by Jackson Tian
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
Jackson Tian1.8K views
线程与并发 by Tony Deng
线程与并发线程与并发
线程与并发
Tony Deng1.7K views
Introduction to C++ over CLI by 建興 王
Introduction to C++ over CLIIntroduction to C++ over CLI
Introduction to C++ over CLI
建興 王2.8K views
用 Ruby 開發 IoT 應用 - 以 RubyConf.tw 打卡系統為例 by 亮齊 曾
用 Ruby 開發 IoT 應用 - 以 RubyConf.tw 打卡系統為例用 Ruby 開發 IoT 應用 - 以 RubyConf.tw 打卡系統為例
用 Ruby 開發 IoT 應用 - 以 RubyConf.tw 打卡系統為例
亮齊 曾403 views

More from Justin Lin

Ch14 簡介 Spring Boot by
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
872 views22 slides
Ch13 整合 Spring MVC/Security by
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
280 views58 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
274 views31 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
157 views8 slides
Ch10 Web 容器安全管理 by
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
153 views30 slides
Ch09 整合資料庫 by
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
233 views92 slides

More from Justin Lin(20)

Ch14 簡介 Spring Boot by Justin Lin
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin872 views
Ch13 整合 Spring MVC/Security by Justin Lin
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin280 views
Ch12 Spring 起步走 by Justin Lin
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin274 views
Ch11 簡介 JavaMail by Justin Lin
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin157 views
Ch10 Web 容器安全管理 by Justin Lin
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin153 views
Ch09 整合資料庫 by Justin Lin
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin233 views
Ch08 自訂標籤 by Justin Lin
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin133 views
Ch07 使用 JSTL by Justin Lin
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
Justin Lin161 views
Ch06 使用 JSP by Justin Lin
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
Justin Lin250 views
Ch05 Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin204 views
Ch04 會話管理 by Justin Lin
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
Justin Lin238 views
Ch03 請求與回應 by Justin Lin
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
Justin Lin236 views
Ch02 撰寫與設定 Servlet by Justin Lin
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin352 views
CH1. 簡介 Web 應用程式 by Justin Lin
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin1.2K views
14. 進階主題 by Justin Lin
14. 進階主題14. 進階主題
14. 進階主題
Justin Lin406 views
13.並行、平行與非同步 by Justin Lin
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin238 views
12. 除錯、測試與效能 by Justin Lin
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin153 views
11. 常用內建模組 by Justin Lin
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
Justin Lin149 views
10. 資料永續與交換 by Justin Lin
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
Justin Lin156 views
9. 資料結構 by Justin Lin
9. 資料結構9. 資料結構
9. 資料結構
Justin Lin292 views

Java 8 與 retrolambda