1、 动态排序 1.8以上才有这个方法
Collections. sort(list, new BeanComparator(“name”){
//重写比较方法 如果是正序 就没必要写
@Override
public int compare(Object o1, Object o2) {
return super.compare(o2, o1);
}
});
2、对象动态属性赋值
Test test=new Test();
ReflectHelper reflectHelper = new ReflectHelper(test);//创建工具类对象
reflectHelper.setMethodValue("name", "1");
reflectHelper.setMethodValue("age", 2);
package com.bootdo.sjzxinterface.sjtjzc.utils;
import org.apache.commons.beanutils.BeanComparator;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Hashtable;
import java.util.List;
import java.util.regex.Pattern;
public class ReflectHelper {
private Class cls;
/**
* 传过来的对象 动态属性赋值
*/
private Object obj;
private Hashtable<String, Method> getMethods = null;
private Hashtable<String, Method> setMethods = null;
public ReflectHelper(Object o) {
obj = o;
initMethods();
}
public void initMethods() {
getMethods = new Hashtable<String, Method>();
setMethods = new Hashtable<String, Method>();
cls = obj.getClass();
Method[] methods = cls.getMethods();
// 定义正则表达式,从方法中过滤出getter / setter 函数.
String gs = "get(\\w+)";
Pattern getM = Pattern.compile(gs);
String ss = "set(\\w+)";
Pattern setM = Pattern.compile(ss);
// 把方法中的"set" 或者 "get" 去掉,$1匹配第一个
String rapl = "$1";
String param;
for (int i = 0; i < methods.length; ++i) {
Method m = methods[i];
String methodName = m.getName();
if (Pattern.matches(gs, methodName)) {
param = getM.matcher(methodName).replaceAll(rapl).toLowerCase();
getMethods.put(param, m);
} else if (Pattern.matches(ss, methodName)) {
param = setM.matcher(methodName).replaceAll(rapl).toLowerCase();
setMethods.put(param, m);
} else {
// org.jeecgframework.core.util.LogUtil.info(methodName + " 不是getter,setter方法!");
}
}
}
public boolean setMethodValue(String property,Object object) {
Method m = setMethods.get(property.toLowerCase());
if (m != null) {
try {
// 调用目标类的setter函数
m.invoke(obj, object);
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
return false;
}
}