1. package com.liyadong.utils;
    2. import java.lang.reflect.Field;
    3. import java.lang.reflect.Method;
    4. import java.util.ArrayList;
    5. import java.util.HashSet;
    6. import java.util.List;
    7. import java.util.Set;
    8. import java.util.stream.Collectors;
    9. //实体对象,转换成值对象
    10. public class EntityToVoUtils {
    11. //反射真是无敌
    12. /**
    13. * 单个实体对象转换成VO
    14. * @param source 实体对象
    15. * @param clazz VO类
    16. * @param <S> 实体对象类型
    17. * @param <V> VO类型
    18. * @return VO
    19. */
    20. public static <S,V> V ETV(S source,Class<V> clazz){
    21. V result = null;
    22. try {
    23. result = clazz.newInstance();
    24. Class sclazz = source.getClass();
    25. Field[] fs = clazz.getDeclaredFields();
    26. Field[] f1s = sclazz.getDeclaredFields();
    27. for(Field f:fs){
    28. for(Field f1:f1s){
    29. if(f.getName().equals(f1.getName())){
    30. Method m = sclazz.getMethod("get" + f1.getName().substring(0, 1).toUpperCase() + f1.getName().substring(1));
    31. Object value = m.invoke(source);
    32. f.setAccessible(true);
    33. f.set(result,value);
    34. }
    35. }
    36. }
    37. } catch (Exception e) {
    38. e.printStackTrace();
    39. }
    40. return result;
    41. }
    42. /**
    43. * 实体对象集合转换成VO集合
    44. * @param sources 实体对象集合
    45. * @param clazz VO类
    46. * @param <S>
    47. * @param <V>
    48. * @return
    49. */
    50. public static <S,V> List<V> ETVs(List<S> sources,Class<V> clazz){
    51. List<V> vos = new ArrayList<>();
    52. return sources
    53. .stream()
    54. .map(o->ETV(o,clazz))
    55. .collect(Collectors.toList());
    56. }
    57. }