- 获取类field对应的值
- 判断字段名称是否存在
- 按字段对对象列表进行排序(内存分页排序场景)
public class ReflexUtils {
public static <T> Object getByFieldName(T obj, String fieldName) {
try {
String getMethodName = "get".concat(fieldName.substring(0, 1).toUpperCase()).concat(fieldName.substring(1));
Method method = obj.getClass().getMethod(getMethodName);
return method.invoke(obj);
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
}
return null;
}
public static boolean hasField(String fieldName, Class<?> clazz) {
if (!fieldName.isEmpty() && clazz != null) {
Class<?> cl = clazz;
List<Field> fields = new ArrayList<>();
while (cl != Object.class) {
fields.addAll(Arrays.asList(cl.getDeclaredFields()));
cl = cl.getSuperclass();
}
for (Field field : fields) {
if (field.getName().equalsIgnoreCase(fieldName)) {
return true;
}
}
}
return false;
}
public static<T> void sortedByOrderField(List<T> list, String orderField, String orderValue) {
Collections.sort(list, (a, b) -> {
Object aValue = getByFieldName(a, orderField);
Object bValue = getByFieldName(b, orderField);
if (aValue == null || bValue == null) {
int sign = "desc".equalsIgnoreCase(orderValue) ? -1 : 1;
if (aValue != null) {
return sign;
}
if (bValue != null) {
return -sign;
}
return 0;
}
String aStr = aValue.toString();
String bStr = bValue.toString();
if (aValue instanceof String) {
if ("desc".equalsIgnoreCase(orderValue)) {
return bStr.compareTo(aStr);
} else {
return aStr.compareTo(bStr);
}
} else if (aValue instanceof BigDecimal || aValue instanceof Double) {
if ("desc".equalsIgnoreCase(orderValue)) {
return new BigDecimal(bStr).compareTo(new BigDecimal(aStr));
} else {
return new BigDecimal(aStr).compareTo(new BigDecimal(bStr));
}
}
else if (aValue instanceof Integer) {
if ("desc".equalsIgnoreCase(orderValue)) {
return Integer.compare(Integer.parseInt(bStr), Integer.parseInt(aStr));
} else {
return Integer.compare(Integer.parseInt(aStr), Integer.parseInt(bStr));
}
} else if (aValue instanceof Long) {
if ("desc".equalsIgnoreCase(orderValue)) {
return Long.compare(Integer.parseInt(bStr), Integer.parseInt(aStr));
} else {
return Long.compare(Integer.parseInt(aStr), Integer.parseInt(bStr));
}
}
else {
if ("desc".equalsIgnoreCase(orderValue)) {
return bStr.compareTo(aStr);
} else {
return aStr.compareTo(bStr);
}
}
});
}
}