泛型实现通用对象工具类(2)

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author dengjingsi
 * 格式化工具类
 * S为需要作为主键的类型map的key类型(T中的一个属性类型),T为map的value值
 */
public class FormatUtil<S,T> {

    /**
     * 把list格式的对象以property方法名获取到的属性为主键,转化为map格式
     * @param list
     * @param property
     * @return
     */
    public Map<S,T> formatList(List<T> list, String property){
        if(null == list || list.size() == 0){
            return new HashMap<>(0);
        }
        Map<S,T> map = new HashMap<>(list.size());
        try{
            for(T element : list){
                Method method = element.getClass().getMethod(property,new Class[]{});
                map.put((S)method.invoke(element,new Object[]{}),element);
            }
        }catch(NoSuchMethodException n){
            n.printStackTrace();
        }catch(InvocationTargetException it){
            it.printStackTrace();
        }catch(IllegalAccessException i){
            i.printStackTrace();
        }
        return map;
    }

    /**
     * 把list格式的对象以Id属性为主键,转化为map格式
     * @param list
     * @return
     */
    public Map<S,T> formatList(List<T> list){
        return formatList(list, "getId");
    }

    /**
     * 把list集合以R对象的getProperty方法名获取到的属性为key、R为value,生成map集合
     * @param list R的list集合
     * @param getProperty 获取key属性方法名
     * @param <E> key属性的类型
     * @param <R> 元素
     * @return R以getProperty方法获取到的值为key的map集合
     */
    public static <E,R> Map<E,R> get(List<R> list,String getProperty){
        Map<E,R> map = new HashMap<>(list.size());
        for(R element : list){
            Method method = null;
            try {
                method = element.getClass().getMethod(getProperty,new Class[]{});
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
            try {
                map.put((E)method.invoke(element,new Object[]{}),element);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
        return map;
    }
}

泛型实现通用对象工具类:https://blog.csdn.net/weixin_39194257/article/details/88736394

针对自己写的泛型工具类方法,新增public static <E,R> Map<E,R> get(List<R> list,String getProperty)方法,针对方法的泛型,运用更灵活,就不需要实例化工具类对象了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章