1. 程式人生 > >Java8函數語言程式設計之物件轉換

Java8函數語言程式設計之物件轉換

一.簡單介紹

通常當我們呼叫介面得到資料時需要轉換一個物件成我們內部程式碼中定義的資料結構,
使用java8的Function和Stream‘s map可以很方便高效的完成轉換。

在我們開始之前,有兩個概念要了解。 第一個是一個接受一個引數併產生結果的java.util.function.Function類。
第二個是流操作類Stream,它通過提供的函式將流中的每個元素轉換為另一個物件。下面的方法構造,其中T是函式的
輸入型別,R是輸出型別。

1

2

3

4

5

Function<T, R> myFunction = 

new Function<T, R>() {

public R apply(T t) {

return null;

}

};

二.示例

1

2

3

4

5

6

7

8

9

10

//Test

public class Test {

private String testA;

private String testB;

}

//MyTest

public class MyTest {

private

 Integer myTestA;

private Integer myTestB;

}

三.轉換成一個單獨的物件

將物件轉換為另一個物件的第一步是定義一個函式。 前面提到,函式將接受Test型別物件,並將返回一個MyTest的例項。
在這個方法中,我們將建立一個MyTest的新物件並設定從Test傳遞的值。這兒在物件之間的對映非常簡單,但你可以應用
各種對映或業務規則。 呼叫function.apply會將函式應用於給定的引數。

1

2

3

4

5

6

7

8

9

10

11

12

Function<Test, MyTest> testToMyTest = (t) -> {

MyTest myTest = new MyTest();

myTest.setMyTestA(Integer.valueOf(t.getTestA()));

myTest.setMyTestB(Integer.valueOf(t.getTestB()));

return myTest;

};

@Test

public void convertSingleObject() {

Test test = new Test("10","100");

MyTest myTest = testToMyTest.apply(test);

assertEquals(myTest.getMyTestA(), myTest.getMyTestB());

}

四.轉換物件集合

接下來我們轉換物件集合。 隨機生成一些測試資料,並在列表中呼叫java.util.stream.Stream()。
Java8流表示一系列可以執行一個或多個操作的元素,例如縮減和聚合操作。正如我們上面指出的那樣,
我們將呼叫對映並傳遞函式來轉換列表。 最後呼叫collect,我們將指示流返回MyTest的列表。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@Test

public void convertCollection() {

Test test1 = new Test("10""100");

Test test2 = new Test("11""101");

Test test3 = new Test("12""102");

Test test4 = new Test("13""103");

List<Test> tests = new ArrayList<Test>();

tests.add(test1);

tests.add(test2);

tests.add(test3);

tests.add(test4);

List<MyTest> myTests = tests.stream()

.map(testToMyTest)

.collect(Collectors.toList());

}

五.總結

那我們為什麼不使用標準的foreach構造。原因如下:
1.使用函式可以促進簡潔的程式碼
2.可重用的方法(如果我們沒有使用函式,我們會複製相同的邏輯來轉換單個物件和ArrayList。)
3.函式式的程式設計思維
4.並且更容易進行單元測試