Java8函數式編程之對象轉換

一.簡單介紹

一般當咱們調用接口獲得數據時須要轉換一個對象成咱們內部代碼中定義的數據結構,
使用java8的Function和Stream‘s map能夠很方便高效的完成轉換。java

在咱們開始以前,有兩個概念要了解。 第一個是一個接受一個參數併產生結果的java.util.function.Function類。
第二個是流操做類Stream,它經過提供的函數將流中的每一個元素轉換爲另外一個對象。下面的方法構造,其中T是函數的
輸入類型,R是輸出類型。編程

1數據結構

2app

3函數

4單元測試

5測試

Function<T, R> myFunction = new Function<T, R>() {spa

   public R apply(T t) {.net

    return null;code

  }

};

 

二.示例

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());

}

 

輸出
MyTest [myTestA=10, myTestB=100]

四.轉換對象集合

接下來咱們轉換對象集合。 隨機生成一些測試數據,並在列表中調用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.<MyTest> toList());

}

 

五.總結

那咱們爲何不使用標準的foreach構造。緣由以下: 1.使用函數能夠促進簡潔的代碼 2.可重用的方法(若是咱們沒有使用函數,咱們會複製相同的邏輯來轉換單個對象和ArrayList。) 3.函數式的編程思惟 4.而且更容易進行單元測試

相關文章
相關標籤/搜索