利用反射机制转换成集合

package cn.linksla.common.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;

public class BeanTools {

    /**
     * 获取get方法
     *
     * @param name get方法名
     * @param cls
     * @return
     */
    public static Method getGetMethod(String name, Class<?> cls) {
        Method[] methods = cls.getMethods();
        for (Method method : methods) {
            String getMethodName = method.getName();
            if (getMethodName.equalsIgnoreCase("get" + name)) {
                return method;
            }
        }
        return null;
    }

    /**
     * 获取set方法
     *
     * @param name set方法名
     * @param cls
     * @return
     */
    public static Method getSetMethod(String name, Class<?> cls) {
        Method[] methods = cls.getMethods();
        for (Method method : methods) {
            String getMethodName = method.getName();
            if (getMethodName.equalsIgnoreCase("set" + name)) {
                return method;
            }
        }
        return null;
    }

    /**
     * 利用反射实现,list对象根据指定字段组,转出listMap
     *
     * @param object
     * @return
     * @throws Exception
     */
    public static List<Map<String, Object>> mapListtArrToMapArr(List<Map> objectList, String[] strArr) throws Exception {
        List<String> strList = Arrays.asList(strArr);
        if (objectList == null) {
            return null;
        }
        List<Map<String, Object>> list = new ArrayList<>();
        for (Map obj : objectList) {
            Map<String, Object> map = new HashMap<String, Object>();
            List<String> fieldList = new ArrayList<>();
            fieldList.addAll(obj.keySet());
            for (String varName : fieldList) {
                if (strList.contains(varName)) {
                    map.put(varName, obj.get(varName));
                }
            }
            list.add(map);
        }
        return list;
    }

    /**
     * 利用反射实现,list对象根据指定字段组,转出listMap
     *
     * @param object
     * @return
     * @throws Exception
     */
    public static List<Map<String, Object>> objectArrToMapArr(Object object, String[] strArr) throws Exception {
        List<String> strList = Arrays.asList(strArr);
        if (object == null) {
            return null;
        }
        List<Object> objectList = (List<Object>) object;
        List<Map<String, Object>> list = new ArrayList<>();
        for (Object obj : objectList) {
            Map<String, Object> map = new HashMap<String, Object>();
            List<Field> fieldList = new ArrayList<>();
            Class objClass = obj.getClass();
            while (objClass != null) {//当父类为null的时候说明到达了最上层的父类(Object类).
                fieldList.addAll(Arrays.asList(objClass.getDeclaredFields()));
                objClass = objClass.getSuperclass(); //得到父类,然后赋给自己
            }
            for (Field field : fieldList) {
                String varName = field.getName();
                boolean accessFlag = field.isAccessible();
                field.setAccessible(true);// 允许通过反射访问该字段
                Object valueObj = field.get(obj);
                if (strList.contains(varName)) {
                    map.put(varName, valueObj);
                }
                field.setAccessible(accessFlag);
            }
            list.add(map);
        }
        return list;
    }

    /**
     * 利用反射实现,对象根据指定字段组,转出Map
     *
     * @param obj
     * @return
     * @throws Exception
     */
    public static Map<String, Object> objectToMap(Object obj, String[] strArr) throws Exception {
        List<String> strList = Arrays.asList(strArr);
        if (obj == null) {
            return null;
        }
        Map<String, Object> map = new HashMap<String, Object>();
        List<Field> fieldList = new ArrayList<>();
        Class objClass = obj.getClass();
        while (objClass != null) {//当父类为null的时候说明到达了最上层的父类(Object类).
            fieldList.addAll(Arrays.asList(objClass.getDeclaredFields()));
            objClass = objClass.getSuperclass(); //得到父类,然后赋给自己
        }
        for (Field field : fieldList) {
            String varName = field.getName();
            boolean accessFlag = field.isAccessible();
            field.setAccessible(true);// 允许通过反射访问该字段
            Object valueObj = field.get(obj);
            if (strList.contains(varName)) {
                map.put(varName, valueObj);
            }
            field.setAccessible(accessFlag);
        }
        return map;
    }


    /**
     * 利用反射实现,list对象根据指定字段组,转出listMap
     *
     * @return
     * @throws Exception
     */
    public static List<Map<String, Object>> mapArrToMapArr(List<Map> mapList, String[] strArr) throws Exception {
        List<String> strList = Arrays.asList(strArr);
        if (mapList == null) {
            return null;
        }
        List<Map<String, Object>> list = new ArrayList<>();
        for (Map objMap : mapList) {
            Map<String, Object> map = new HashMap<String, Object>();
            List<Field> fieldList = new ArrayList<>();
            for (Object key : objMap.keySet()) {
                if (strList.contains(key.toString())) {
                    map.put(key.toString(), objMap.get(key));
                }
            }
            list.add(map);
        }
        return list;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值