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)方法,针对方法的泛型,运用更灵活,就不需要实例化工具类对象了。