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.而且更容易进行单元测试

相关文章
相关标签/搜索