一)背景
主要是为了实现数据之间的转换,方便数据展示。
使用场景:当从数据库中查询出来的数据可能是List<Map<String, Object>>类型,可能会需要转换成具体的List<Class>格式。
二)List<Map<String, Object>>转换成List<T>
功能:传入List<Map<String, Object>>数据和需要转换的Class对象,返回一个List<Class>数据集合
实现方式:Java反射方式
实现源码:
package com.oysept.utils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ListMapToBeanUtils {
/**
* List<Map<String, Object>>转List<T>
*/
public static <T> List<T> castMapToBean(List<Map<String, Object>> list, Class<T> clazz) throws Exception {
if (list == null || list.size()==0) {
return null;
}
List<T> tList = new ArrayList<T>();
// 获取类中声明的所有字段
Field[] fields = clazz.getDeclaredFields();
T t;
for (Map<String, Object> map : list) {
// 每次都先初始化一遍,然后再设置值
t = clazz.newInstance();
for (Field field : fields) {
// 把序列化的字段去除掉
if (!"serialVersionUID".equals(field.getName())) {
// 由于Field都是私有属性,所有需要允许修改
field.setAccessible(true);
// 设置值, 类型要和vo中的属性名称对应好,不然会报类型转换错误
field.set(t, map.get(field.getName()));
}
}
tList.add(t); // 把转换好的数据添加到集合中
}
return tList;
}
}
三)实体类PhoneVO.java
package com.oysept.bean;
import java.io.Serializable;
/**
* 实体类
* @author ouyangjun
*/
public class PhoneVO implements Serializable {
private static final long serialVersionUID = 1L;
private String plate;
private Long number;
private Double memory;
private Double size;
public String getPlate() { return plate; }
public void setPlate(String plate) { this.plate = plate; }
public Long getNumber() { return number; }
public void setNumber(Long number) { this.number = number; }
public Double getMemory() { return memory; }
public void setMemory(Double memory) { this.memory = memory; }
public Double getSize() { return size; }
public void setSize(Double size) { this.size = size;}
}
四)数据转换测试类
package com.oysept.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.oysept.bean.PhoneVO;
import com.oysept.utils.ListMapToBeanUtils;
public class ListToBeanTest {
public static void main(String[] args) throws Exception {
// 初始化
Map<String, Object> map = new HashMap<String, Object>();
map.put("plate", "hw");
map.put("number", 13655555555L);
map.put("memory", 4.0);
map.put("size", 6.0);
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("plate", "vivo");
map1.put("number", 13677777777L);
map1.put("memory", 5.5);
map1.put("size", 3.8);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
list.add(map);
list.add(map1);
// List<Map<String, Object>>转List<T>
List<PhoneVO> phoneList = ListMapToBeanUtils.castMapToBean(list, PhoneVO.class);
System.out.println("==>phoneList.size(): " + phoneList.size());
for (PhoneVO phone : phoneList) {
System.out.println(phone.getPlate() + "\t" + phone.getNumber()
+ "\t" + phone.getMemory() + "\t" + phone.getSize());
}
}
}
数据转换打印效果图:
五)数据转换之JSON方式
实现方式:下面提供一个用com.alibaba.fastjson实现List<Map<Object, Object>>转List<T>的方法。
实现原理:先把List<Map<Object, Object>>格式的数据转换成json字符串,再把json字符串转换成List<Class>格式。
在maven项目中pom.xml文件导入jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.66</version>
</dependency>
实现源码:
package com.oysept.utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
/**
*
* @author ouyangjun
*/
public class ObjectToJsonUtils {
/**
* List<Map<Object,Object>>转换List<T>
*/
@SuppressWarnings("unchecked")
public static <T> List<T> castMapToBean(List<Map<Object, Object>> list, Class<?> beanClass) {
List<T> returnList = new ArrayList<T>();
if (list == null || list.size()==0) {
return null;
}
String json = "";
for (Map<Object, Object> map : list) {
json = JSONObject.toJSONString(map);
// 添加到集合中
returnList.add((T)JSONObject.parseObject(json, beanClass));
}
// 返回
return returnList;
}
}
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!