package com.liyadong.utils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
//实体对象,转换成值对象
public class EntityToVoUtils {
//反射真是无敌
/**
* 单个实体对象转换成VO
* @param source 实体对象
* @param clazz VO类
* @param <S> 实体对象类型
* @param <V> VO类型
* @return VO
*/
public static <S,V> V ETV(S source,Class<V> clazz){
V result = null;
try {
result = clazz.newInstance();
Class sclazz = source.getClass();
Field[] fs = clazz.getDeclaredFields();
Field[] f1s = sclazz.getDeclaredFields();
for(Field f:fs){
for(Field f1:f1s){
if(f.getName().equals(f1.getName())){
Method m = sclazz.getMethod("get" + f1.getName().substring(0, 1).toUpperCase() + f1.getName().substring(1));
Object value = m.invoke(source);
f.setAccessible(true);
f.set(result,value);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 实体对象集合转换成VO集合
* @param sources 实体对象集合
* @param clazz VO类
* @param <S>
* @param <V>
* @return
*/
public static <S,V> List<V> ETVs(List<S> sources,Class<V> clazz){
List<V> vos = new ArrayList<>();
return sources
.stream()
.map(o->ETV(o,clazz))
.collect(Collectors.toList());
}
}