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 8 與 retrolambda

4,417 views

Published on

2015放視大賞-工作坊-Java 8 與 retrolambda

Published in: Technology
  • Be the first to comment

Java 8 與 retrolambda

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

×