DataTransformUtil.java
利用java反射写的一些包装数据的方法
/**
* @author ChenJunLin
* @desciption 处理数据结果集的工具类
* @create 2018-01-09 10:29
**/
public class DataTransformUtil {
/** 默认的用户头像 */
public static final String DEAULT_ACCOUNT_IMG = "/image/default_avatar.png";
/**
* @Author: ChenJunLin
* @Desciption: 设置集合中头像字段的默认值和前缀路径
* clss: 集合泛型的类
* list: 需要操作的集合
* properties: 头像字段
* prefixUrl: 前缀路径
* defaulUrl: 默认头像路径
* baseUrl: 项目根路径
* @Date: 10:30 2018/1/9
* @param:
*/
public static void setImageFromList (Class clss, List list, String properties, String prefixUrl, String defaulUrl, String baseUrl){
try {
if(StringUtils.isEmpty(defaulUrl)){
defaulUrl = baseUrl + DEAULT_ACCOUNT_IMG;
}
Method getImage = getGetterMethod(clss, properties);
Method setImage = getSetterMethod(clss, properties, String.class);
for (Object t : list){
Object image = getImage.invoke(t);
if(null ==image || StringUtils.isEmpty(image.toString())){
setImage.invoke(t,defaulUrl);
}else {
String img = image.toString();
if(img.startsWith("/")){
setImage.invoke(t, prefixUrl+img);
}else {
setImage.invoke(t, prefixUrl+"/"+img);
}
}
}
}catch (Exception e){
e.printStackTrace();
}
}
/**
* @Author: ChenJunLin
* @Desciption: 设置集合中头像字段的默认值和前缀路径 (List<Map>使用)
* list: 需要操作的集合
* properties: 头像字段
* prefixUrl: 前缀路径
* defaulUrl: 默认头像路径
* baseUrl: 项目根路径
* @Date: 17:38 2018/1/19
* @param:
*/
public static void setImageFromList (List list, String properties, String prefixUrl, String defaulUrl, String baseUrl){
try {
if(StringUtils.isEmpty(defaulUrl)){
defaulUrl = baseUrl + DEAULT_ACCOUNT_IMG;
}
Class mapClass = Map.class;
Method[] methods = mapClass.getDeclaredMethods();
Method getImage = mapClass.getDeclaredMethod("get",Object.class);
Method setImage = mapClass.getDeclaredMethod("put",Object.class,Object.class);
for (Object t : list){
Object image = getImage.invoke(t, properties);
if(null ==image || StringUtils.isEmpty(image.toString())){
setImage.invoke(t,properties,defaulUrl);
}else {
String img = image.toString();
if(img.startsWith("/")){
setImage.invoke(t, properties, prefixUrl+img);
}else {
setImage.invoke(t, properties, prefixUrl+"/"+img);
}
}
}
}catch (Exception e){
e.printStackTrace();
}
}
/**
* @Author: ChenJunLin
* @Desciption: 将list集合封装为以某字段为key,list集合为value的map
* 如:list为整个学校每个班的学生分数情况,现在需要以年级为单位返回学生分数情况
* clss: 集合泛型的类型
* list: 集合
* properties: 需要作为key的属性
* @Date: 9:56 2018/1/10
* @param:
*/
public static Map<Object,List> ListToMapList (Class clss, List list, String properties){
try {
Method getMethod = getGetterMethod(clss, properties);
Map<Object, List> r = new LinkedHashMap<>();
for(Object o : list){
Object key = getMethod.invoke(o);
if(!r.containsKey(key)){
r.put(key,new ArrayList<>());
}
r.get(key).add(o);
}
return r;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* @Author: ChenJunLin
* @Desciption: 从list中分离某一字段的list,并去重
* clss: 集合泛型的类型
* list: 集合
* properties: 需要作为key的属性
* @Date: 10:01 2018/1/10
* @param:
*/
public static List keyListFromList(Class clss, List list, String properties){
Method getterMethod = getGetterMethod(clss, properties);
Set<Object> set = new HashSet<>();
try {
for(Object o : list){
Object val = getterMethod.invoke(o);
set.add(val);
}
return new ArrayList(set);
}catch (Exception e){
}
return list;
}
/**
* @Author: ChenJunLin
* @Desciption: 首字母大写
* @Date: 9:48 2018/1/10
* @param:
*/
public static String captain (String s){
char[] chars = s.toCharArray();
chars[0] -= 32;
s = String.valueOf(chars);
return s;
}
/**
* @Author: ChenJunLin
* @Desciption: 获取get方法
* @Date: 10:05 2018/1/10
* @param:
*/
public static Method getGetterMethod(Class clss, String properties){
try {
properties = captain(properties);
String get = "get"+properties;
Method getMethod = clss.getDeclaredMethod(get);
return getMethod;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* @Author: ChenJunLin
* @Desciption: 获取get方法
* @Date: 10:05 2018/1/10
* @param:
*/
public static Method getSetterMethod(Class clss, String properties, Class propertiesType){
try {
properties = captain(properties);
String set = "set"+properties;
Method setMethod = clss.getDeclaredMethod(set,propertiesType);
return setMethod;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
后续还会陆续补充.........
更新时间记录: 2018/1/10
2018/1/23 添加 setImageFromList 的重载方法 支持List<Map>类型的图片路径设置
2018/2/1 setImageFromList Map类型方法修改 set方法调用参数
网友评论