java 8 與 retrolambda

45
Java 8 與 retrolambda Justin Lin [email protected] http://openhome.cc

Upload: justin-lin

Post on 18-Jul-2015

1.737 views

Category:

Technology


4 download

TRANSCRIPT

Java 8 與 retrolambda

Justin Lin

[email protected]

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 expression Stream 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

……

34

Optional

35

36

繼續重構

Java 8 API?

• streamsupport 替代 java.util.stream

38

r

39

40

41

44

Justin Lin

[email protected]

http://openhome.cc

The others?

45