一)背景
主要是为了实现数据之间的转换,方便数据展示。
使用场景:当数据可能是List<Object[]>类型,可能会需要转换成具体的List<Class>格式。
二)List<Object[]>转换成List<T>
功能:传入List<Object[]>数据和需要转换的Class对象,返回一个List<Class>数据集合
实现方式:Java反射方式,使用的是构造器的方式
缺点:实体类中必须有无参数构造器,有参数构造器,且构造器参数的顺序和数据的顺序必须一致。如果数据格式有变化,需要重新编写一个实体类的构造器
实现源码:
package com.oysept.utils;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;
/**
* List<Object[]>转换成一个List<T>
* @author ouyangjun
*/
public class ObjectToBeanUtils {
/**
* 把List<Object[]>转换成List<T>
*/
public static <T> List<T> objectToBean(List<Object[]> objList, Class<T> clz) throws Exception{
if (objList==null || objList.size()==0) {
return null;
}
Class<?>[] cz = null;
Constructor<?>[] cons = clz.getConstructors();
for (Constructor<?> ct : cons) {
Class<?>[] clazz = ct.getParameterTypes();
if (objList.get(0).length == clazz.length) {
cz = clazz;
break;
}
}
List<T> list = new ArrayList<T>();
for (Object[] obj : objList) {
Constructor<T> cr = clz.getConstructor(cz);
list.add(cr.newInstance(obj));
}
return list;
}
}
三)实体类PhoneVO.java
package com.oysept.bean;
import java.io.Serializable;
import java.math.BigDecimal;
public class PhoneEntity implements Serializable {
private static final long serialVersionUID = 1L;
public PhoneEntity() {}
/**
* 构造器
* 注意: 实体类中必须有无参数构造器,有参数构造器,且构造器参数的顺序和数据的顺序必须一致。如果数据格式有变化,需要重新编写一个实体类的构造器
*/
public PhoneEntity(String plate, BigDecimal number, double memory, double size) {
super();
this.plate = plate;
this.number = String.valueOf(number);
this.memory = String.valueOf(memory);
this.size = String.valueOf(size);
}
private String plate;
private String number;
private String memory;
private String size;
public String getPlate() { return plate; }
public void setPlate(String plate) { this.plate = plate; }
public String getNumber() { return number; }
public void setNumber(String number) { this.number = number; }
public String getMemory() { return memory; }
public void setMemory(String memory) { this.memory = memory; }
public String getSize() { return size; }
public void setSize(String size) { this.size = size;}
}
四)数据转换测试类
package com.oysept.test;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import com.oysept.bean.PhoneEntity;
import com.oysept.utils.ObjectToBeanUtils;
/**
* 测试类
* @author ouyangjun
*/
public class ObjectToBeanTest {
public static void main(String[] args) throws Exception {
// 初始化数据
Object[] obj = new Object[4];
obj[0] = "hw";
obj[1] = BigDecimal.valueOf(13699999999L);
obj[2] = 4.7;
obj[3] = 5.0;
Object[] obj1 = new Object[4];
obj1[0] = "vivo";
obj1[1] = BigDecimal.valueOf(13611111111L);
obj1[2] = 4.8;
obj1[3] = 5.7;
List<Object[]> objList = new ArrayList<Object[]>();
objList.add(obj);
objList.add(obj1);
// 工具类
List<PhoneEntity> list = ObjectToBeanUtils.objectToBean(objList, PhoneEntity.class);
for (PhoneEntity phone : list) {
System.out.println(phone.getPlate() + "\t" + phone.getNumber()
+ "\t" + phone.getMemory() + "\t" + phone.getSize());
}
}
}
数据转换打印效果图:
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!